国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關(guān)于 this 的四類用法

Hanks10100 / 528人閱讀

摘要:構(gòu)造器中的指向新對象中,我們通過關(guān)鍵詞來調(diào)用構(gòu)造函數(shù),此時會綁定在該新對象上。輸出順便說一句,在中,構(gòu)造函數(shù)普通函數(shù)對象方法閉包,這四者沒有明確界線。

this

在函數(shù)執(zhí)行時,this 總是指向調(diào)用該函數(shù)的對象。要判斷 this 的指向,其實就是判斷 this 所在的函數(shù)屬于誰。

在《javaScript語言精粹》這本書中,把 this 出現(xiàn)的場景分為四類,簡單的說就是:

有對象就指向調(diào)用對象

沒調(diào)用對象就指向全局對象

用new構(gòu)造就指向新對象

通過 apply 或 call 或 bind 來改變 this 的所指。

1) 函數(shù)有所屬對象時:指向所屬對象

函數(shù)有所屬對象時,通常通過 . 表達式調(diào)用,這時 this 自然指向所屬對象。比如下面的例子:

jsvar myObject = {value: 100};
myObject.getValue = function () {
  console.log(this.value);  // 輸出 100

  // 輸出 { value: 100, getValue: [Function] },
  // 其實就是 myObject 對象本身
  console.log(this);

  return this.value;
};

console.log(myObject.getValue()); // => 100

getValue() 屬于對象 myObject,并由 myOjbect 進行 . 調(diào)用,因此 this 指向?qū)ο?myObject。

2) 函數(shù)沒有所屬對象:指向全局對象
jsvar myObject = {value: 100};
myObject.getValue = function () {
  var foo = function () {
    console.log(this.value) // => undefined
    console.log(this);// 輸出全局對象 global
  };

  foo();

  return this.value;
};

console.log(myObject.getValue()); // => 100

在上述代碼塊中,foo 函數(shù)雖然定義在 getValue 的函數(shù)體內(nèi),但實際上它既不屬于 getValue 也不屬于 myObject。foo 并沒有被綁定在任何對象上,所以當(dāng)調(diào)用時,它的 this 指針指向了全局對象 global。

據(jù)說這是個設(shè)計錯誤。

3) 構(gòu)造器中的 this:指向新對象

js 中,我們通過 new 關(guān)鍵詞來調(diào)用構(gòu)造函數(shù),此時 this 會綁定在該新對象上。

js
var SomeClass = function(){ this.value = 100; } var myCreate = new SomeClass(); console.log(myCreate.value); // 輸出100

順便說一句,在 js 中,構(gòu)造函數(shù)、普通函數(shù)、對象方法、閉包,這四者沒有明確界線。界線都在人的心中。

4) apply 和 call 調(diào)用以及 bind 綁定:指向綁定的對象

apply() 方法接受兩個參數(shù)第一個是函數(shù)運行的作用域,另外一個是一個參數(shù)數(shù)組(arguments)。

call() 方法第一個參數(shù)的意義與 apply() 方法相同,只是其他的參數(shù)需要一個個列舉出來。

簡單來說,call 的方式更接近我們平時調(diào)用函數(shù),而 apply 需要我們傳遞 Array 形式的數(shù)組給它。它們是可以互相轉(zhuǎn)換的。

jsvar myObject = {value: 100};

var foo = function(){
  console.log(this);
};

foo(); // 全局變量 global
foo.apply(myObject); // { value: 100 }
foo.call(myObject); // { value: 100 }

var newFoo = foo.bind(myObject);
newFoo(); // { value: 100 }

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/85670.html

相關(guān)文章

  • 四大深度學(xué)習(xí)框架+四類GPU+七種神經(jīng)網(wǎng)絡(luò):交叉性能評測

    摘要:最近,等人對于英偉達的四種在四種不同深度學(xué)習(xí)框架下的性能進行了評測。本次評測共使用了種用于圖像識別的深度學(xué)習(xí)模型。深度學(xué)習(xí)框架和不同網(wǎng)絡(luò)之間的對比我們使用七種不同框架對四種不同進行,包括推理正向和訓(xùn)練正向和反向。一直是深度學(xué)習(xí)方面最暢銷的。 最近,Pedro Gusm?o 等人對于英偉達的四種 GPU 在四種不同深度學(xué)習(xí)框架下的性能進行了評測。本次評測共使用了 7 種用于圖像識別的深度學(xué)習(xí)模...

    jk_v1 評論0 收藏0
  • 細說 jQuery DOM操作篇(二) - DOM 樹操作

    摘要:此時,點擊新建的將會觸發(fā)。設(shè)置元素內(nèi)容的方法則使用上述兩種方法,將新內(nèi)容作為參數(shù)傳遞即可,例如修改上例中的文本內(nèi)容方法同理。 我們知道通過 $() 函數(shù)可以訪問文檔中的元素,并返回一個 jQuery 對象,并且通過一系列方法,我們可以修改元素的樣式和內(nèi)容,實際上,我們還可以通過該函數(shù)做更多的事情,例如添加、刪除、復(fù)制等操作來改變 DOM 樹的結(jié)構(gòu)。 創(chuàng)建元素 我們可以通過 $() ...

    Anchorer 評論0 收藏0
  • 純干貨!一切關(guān)于jquery選擇器

    摘要:本人的兩篇原創(chuàng)文章純干貨一切關(guān)于選擇器和純干貨之操作解析,發(fā)布不到個月,就被博客園某賬號認領(lǐng)為他的原創(chuàng),并且他還精心地將慕課網(wǎng)原創(chuàng)文章的版權(quán)聲明和文章中關(guān)于我的點點滴滴,刪除地干干凈凈,很專業(yè)。   本人的兩篇原創(chuàng)文章純干貨!一切關(guān)于jquery選擇器和純干貨!jQuery之DOM操作解析,發(fā)布不到1個月,就被博客園某賬號 認領(lǐng) 為他的原創(chuàng),并且他還精心地將慕課網(wǎng)原創(chuàng)文章的版權(quán)聲明和文...

    gecko23 評論0 收藏0
  • Polyfill:Function.prototype.bind的四個階段

    摘要:第二階段被忽略的細節(jié)函數(shù)的屬性,用于表示函數(shù)的形參。第三階段被忽視的細節(jié)通過生成的構(gòu)造函數(shù)。五本文涉及的知識點的用法的用法除操作符外的構(gòu)造函數(shù)的用法下詭異的命名函數(shù)表達式技術(shù)六總結(jié)在這之前從來沒想過一個的會涉及這么多知識點,感謝給的啟發(fā)。 昨天邊參考es5-shim邊自己實現(xiàn)Function.prototype.bind,發(fā)現(xiàn)有不少以前忽視了的地方,這里就作為一個小總結(jié)吧。 一、Fu...

    mudiyouyou 評論0 收藏0
  • react關(guān)于事件綁定this的四種方式

    摘要:在組件中,每個方法的上下文都會指向該組件的實例,即自動綁定為當(dāng)前組件而且還會對這種引用進行緩存,以達到和內(nèi)存的最大化。 在react組件中,每個方法的上下文都會指向該組件的實例,即自動綁定this為當(dāng)前組件,而且react還會對這種引用進行緩存,以達到cpu和內(nèi)存的最大化。在使用了es6 class或者純函數(shù)時,這種自動綁定就不復(fù)存在了,我們需要手動實現(xiàn)this的綁定以下是幾種綁定的方...

    張利勇 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<