摘要:前言相信很多人都對(duì)中的指向問(wèn)題一知半解,所以今天就來(lái)詳細(xì)看看它到底是怎么判斷的。椎確來(lái)說(shuō)是函數(shù)調(diào)用時(shí)是否有引用上下文對(duì)象。隱式綁定,上下文對(duì)象無(wú)上下文對(duì)象顯示綁定這也是常用的的方式就不一一舉例了。
前言
相信很多人都對(duì)JavaScript中的this指向問(wèn)題一知半解,所以今天就來(lái)詳細(xì)看看它到底是怎么判斷的。一. 先看幾道題
var length = 10; function fn() { console.log(this.length); } var obj = { length: 5, method: function(fn) { fn(); arguments[0](); } }; obj.method(fn, 1); // 10 2
var name = "window"; function f1() { var name = "f1"; return function f2() { var name = "f2"; console.log(this.name); } } var foo = f1(); var bar = { name: "bar", foo: foo }; foo(); // window bar.foo(); // bar
var name = "window"; var bar = { name: "bar", foo: function () { var self = this; console.log(this.name); console.log(self.name); (function () { console.log(this.name); console.log(self.name); })() } }; bar.foo(); // bar bar window bar
var name = "window"; function f1() { var name = "f1"; return () => { var name = "f2"; console.log(this.name); } } var foo = f1(); var bar = { name: "bar", foo: foo }; foo(); // window bar.foo(); // window二. this綁定規(guī)則 1.綁定默認(rèn)
當(dāng)其他規(guī)則無(wú)法應(yīng)用時(shí)將采用默人綁定
默認(rèn)綁定將會(huì)綁定到全局對(duì)象
嚴(yán)格模式(strict mode)下不能講全局對(duì)象用于默認(rèn)綁定
function foo() { console.log(this === window); } foo() // true function bar() { "use strict"; console.log(this === window); console.log(this); } bar() // false undefined2.隱式綁定
如果函數(shù)引用有上下文對(duì)象時(shí),this將會(huì)綁定到這個(gè)對(duì)象。椎確來(lái)說(shuō)是函數(shù)調(diào)用時(shí)是否有引用上下文對(duì)象。
var name = "window"; function foo() { console.log(this.name); } var obj = { name: "obj", foo: foo }; obj.foo(); // obj 隱式綁定,上下文對(duì)象obj var bar = obj.foo; bar(); // window 無(wú)上下文對(duì)象3.顯示綁定
這也是常用的的方式:call、apply、bind 就不一一舉例了。
function foo() { console.log(this.name); } var obj = { name: "obj" }; foo.call(obj) // obj4.new綁定
var a; function foo(a) { this.a = a } var bar = new foo(2); console.log(a); //undefined console.log(bar.a); // 2 this了bar三.優(yōu)先級(jí)
var a; function foo(a) { this.a = a; } var obj = { foo: foo }; var obj2 = {}; console.log(a); // undefined obj.foo(1); console.log(obj.a); // 1 obj.foo.call(obj2, 2); console.log(obj2.a); // 2 var baz = obj.foo.bind(obj2); var bar = new baz(3); console.log(bar.a); // 3
從上面的代碼可以看出優(yōu)先級(jí)從高到低依次是:new綁定、顯示綁定、隱式綁定、默認(rèn)綁定。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/103674.html
摘要:任何一個(gè)函數(shù)都可以使用來(lái)調(diào)用,因此其實(shí)并不存在構(gòu)造函數(shù),而只有對(duì)于函數(shù)的構(gòu)造調(diào)用。不可以當(dāng)作構(gòu)造函數(shù),也就是說(shuō),不可以使用命令,否則會(huì)拋出一個(gè)錯(cuò)誤。 this關(guān)鍵字是JavaScript中最復(fù)雜的機(jī)制之一,是一個(gè)特別的關(guān)鍵字,被自動(dòng)定義在所有函數(shù)的作用域中,但是相信很多JsvaScript開(kāi)發(fā)者并不是非常清楚它究竟指向的是什么。聽(tīng)說(shuō)你很懂this,是真的嗎? 請(qǐng)先回答第一個(gè)問(wèn)題:如何準(zhǔn)...
摘要:加載因子是哈希表在其容量自動(dòng)增加之前可以達(dá)到多滿的一種尺度。當(dāng)哈希表中的條目數(shù)超出了加載因子與當(dāng)前容量的乘積時(shí),則要對(duì)該哈希表進(jìn)行操作即重建內(nèi)部數(shù)據(jù)結(jié)構(gòu),從而哈希表將具有大約兩倍的桶數(shù)。 showImg(https://upload-images.jianshu.io/upload_images/4565148-98b22ba5ae7d9723.jpg?imageMogr2/auto-...
摘要:忍者級(jí)別的函數(shù)操作對(duì)于什么是匿名函數(shù),這里就不做過(guò)多介紹了。我們需要知道的是,對(duì)于而言,匿名函數(shù)是一個(gè)很重要且具有邏輯性的特性。通常,匿名函數(shù)的使用情況是創(chuàng)建一個(gè)供以后使用的函數(shù)。 JS 中的遞歸 遞歸, 遞歸基礎(chǔ), 斐波那契數(shù)列, 使用遞歸方式深拷貝, 自定義事件添加 這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制 本文的目的就是要保證你徹底弄懂javascript的執(zhí)行機(jī)制,如果...
摘要:我會(huì)解釋里面神秘的引用,一旦你理解了引用,你就會(huì)明白通過(guò)引用來(lái)了解的綁定是多么輕松,你也會(huì)發(fā)現(xiàn)讀的規(guī)范容易得多了。二理論把引用定義成??纯催\(yùn)算符的說(shuō)法這也就是為什么我們對(duì)一個(gè)無(wú)法解析的引用使用操作符的時(shí)候并不會(huì)報(bào)錯(cuò)。 Know thy reference (原文:know thy reference - kangax) 一、前言 翻譯好不是件容易的事兒,我盡量講得通順,一些術(shù)語(yǔ)會(huì)保留原...
摘要:現(xiàn)微服務(wù)盛行,服務(wù)之間通信大概就兩種方式和。下面兩個(gè)列子來(lái)讓你了解和的區(qū)別。列子一文章的增刪改查。 現(xiàn)微服務(wù)盛行,服務(wù)之間通信大概就兩種方式Api和Rpc。下面兩個(gè)列子來(lái)讓你了解Api和Rpc的區(qū)別。 列子一 文章的增刪改查。 Api 實(shí)現(xiàn): Router::get(/article/{id},ArticleController@get); Router::post(/articl...
閱讀 1503·2023-04-25 15:40
閱讀 2891·2021-08-11 11:15
閱讀 2289·2019-08-26 13:48
閱讀 2861·2019-08-26 12:18
閱讀 2463·2019-08-23 18:23
閱讀 2918·2019-08-23 17:01
閱讀 2991·2019-08-23 16:29
閱讀 1111·2019-08-23 15:15