[英]Weird behavior of bound function
有人可以解釋這里發生了什么嗎?
var dog = {
name: "Dogo"
}
var echo = function() {
console.log(this);
}
dog.echo = echo.bind(this);
echo();
dog.echo();
第一個echo()
按預期打印出全局對象。 但是,第二個打印的空對象{}
與第一個echo()
打印的內容不符。 為什么?
編輯:對不起! 我沒有提到代碼是由nodejs解釋器運行的!
謝謝你的幫助。
在nodejs模塊的主要范圍內, this
變量引用module.exports
,默認情況下它等於空對象{}
,您可以通過運行以下樹行來證明這一點
console.log(this === module.exports);
module.exports.a = "a";
console.log(this);
和輸出應該是
true
{ a: 'a' }
這就是為什么您在第二次調用中得到空對象的原因
但是在模塊的函數內部, this
變量引用nodejs的global
變量 ,以證明它可以像下面那樣創建一個模塊並運行它
global.bar = "baz";
function foo() {
console.log(this === global);
console.log(global.bar);
}
foo();
和輸出應該是
true
baz
這就是為什么您在第一個電話中找到正確的對象的原因
javascript中的綁定功能是更改“ this”所指向的上下文。
如果要在echo函數中將“ this”設置為創建的dog對象,則應將dog作為綁定參數。
dog.echo = echo.bind(dog);
在代碼行上方,更改echo函數中“ this”指向的內容。 所以現在它將指向狗。
在這兩種情況下,回顯中的“ this”都指向全局對象。
現在,一旦您提供dog作為要綁定的參數,這里就是結果。 如您所見,第二個console.log的“ this”已更改。 它指向狗的對象。
Javascript應該在瀏覽器和服務器端(大多數時間)以某種方式運行。 Node建立在javascript之上。 它使用相同的v8引擎來編譯javascript代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.