摘要:構造器中的指向新對象中,我們通過關鍵詞來調用構造函數,此時會綁定在該新對象上。輸出順便說一句,在中,構造函數普通函數對象方法閉包,這四者沒有明確界線。
this
在函數執行時,this 總是指向調用該函數的對象。要判斷 this 的指向,其實就是判斷 this 所在的函數屬于誰。
在《javaScript語言精粹》這本書中,把 this 出現的場景分為四類,簡單的說就是:
有對象就指向調用對象
沒調用對象就指向全局對象
用new構造就指向新對象
通過 apply 或 call 或 bind 來改變 this 的所指。
1) 函數有所屬對象時:指向所屬對象函數有所屬對象時,通常通過 . 表達式調用,這時 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 進行 . 調用,因此 this 指向對象 myObject。
2) 函數沒有所屬對象:指向全局對象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 函數雖然定義在 getValue 的函數體內,但實際上它既不屬于 getValue 也不屬于 myObject。foo 并沒有被綁定在任何對象上,所以當調用時,它的 this 指針指向了全局對象 global。
據說這是個設計錯誤。
3) 構造器中的 this:指向新對象js 中,我們通過 new 關鍵詞來調用構造函數,此時 this 會綁定在該新對象上。
js
var SomeClass = function(){ this.value = 100; } var myCreate = new SomeClass(); console.log(myCreate.value); // 輸出100
順便說一句,在 js 中,構造函數、普通函數、對象方法、閉包,這四者沒有明確界線。界線都在人的心中。
4) apply 和 call 調用以及 bind 綁定:指向綁定的對象apply() 方法接受兩個參數第一個是函數運行的作用域,另外一個是一個參數數組(arguments)。
call() 方法第一個參數的意義與 apply() 方法相同,只是其他的參數需要一個個列舉出來。
簡單來說,call 的方式更接近我們平時調用函數,而 apply 需要我們傳遞 Array 形式的數組給它。它們是可以互相轉換的。
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 }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85670.html
摘要:最近,等人對于英偉達的四種在四種不同深度學習框架下的性能進行了評測。本次評測共使用了種用于圖像識別的深度學習模型。深度學習框架和不同網絡之間的對比我們使用七種不同框架對四種不同進行,包括推理正向和訓練正向和反向。一直是深度學習方面最暢銷的。 最近,Pedro Gusm?o 等人對于英偉達的四種 GPU 在四種不同深度學習框架下的性能進行了評測。本次評測共使用了 7 種用于圖像識別的深度學習模...
摘要:此時,點擊新建的將會觸發。設置元素內容的方法則使用上述兩種方法,將新內容作為參數傳遞即可,例如修改上例中的文本內容方法同理。 我們知道通過 $() 函數可以訪問文檔中的元素,并返回一個 jQuery 對象,并且通過一系列方法,我們可以修改元素的樣式和內容,實際上,我們還可以通過該函數做更多的事情,例如添加、刪除、復制等操作來改變 DOM 樹的結構。 創建元素 我們可以通過 $() ...
摘要:本人的兩篇原創文章純干貨一切關于選擇器和純干貨之操作解析,發布不到個月,就被博客園某賬號認領為他的原創,并且他還精心地將慕課網原創文章的版權聲明和文章中關于我的點點滴滴,刪除地干干凈凈,很專業。 本人的兩篇原創文章純干貨!一切關于jquery選擇器和純干貨!jQuery之DOM操作解析,發布不到1個月,就被博客園某賬號 認領 為他的原創,并且他還精心地將慕課網原創文章的版權聲明和文...
摘要:第二階段被忽略的細節函數的屬性,用于表示函數的形參。第三階段被忽視的細節通過生成的構造函數。五本文涉及的知識點的用法的用法除操作符外的構造函數的用法下詭異的命名函數表達式技術六總結在這之前從來沒想過一個的會涉及這么多知識點,感謝給的啟發。 昨天邊參考es5-shim邊自己實現Function.prototype.bind,發現有不少以前忽視了的地方,這里就作為一個小總結吧。 一、Fu...
摘要:在組件中,每個方法的上下文都會指向該組件的實例,即自動綁定為當前組件而且還會對這種引用進行緩存,以達到和內存的最大化。 在react組件中,每個方法的上下文都會指向該組件的實例,即自動綁定this為當前組件,而且react還會對這種引用進行緩存,以達到cpu和內存的最大化。在使用了es6 class或者純函數時,這種自動綁定就不復存在了,我們需要手動實現this的綁定以下是幾種綁定的方...
閱讀 895·2021-10-13 09:39
閱讀 1486·2021-10-11 10:57
閱讀 2597·2019-08-26 13:53
閱讀 2542·2019-08-26 12:23
閱讀 3694·2019-08-23 18:30
閱讀 3754·2019-08-23 18:08
閱讀 2527·2019-08-23 18:04
閱讀 2963·2019-08-23 16:28