0
我期待從getName2和getName3相同的行爲,但getName3(在非嚴格模式打印「的窗口」)時會引發錯誤不同行爲
"use strict";
var name = 'The Window';
var object = {
name : 'The Object',
getName: function(){
alert(this.name);
}
};
object.getName(); // The Object
object.getName2 = object.getName;
object.getName2(); // The Object
(object.getName3 = object.getName)(); // Error: TypeError: this is undefined
該代碼是從例如衍生在N.Zakas的專業JavaScript for Web Developers的第7章中。
感謝@詹姆斯阿勒代斯,但爲什麼括號內不會對getName2同樣的效果? '(object.getName2)(); // The Object' –
因爲'(o.g3 = o.g)'返回* assignment *的結果,這是一個函數(沒有上下文)。 '(o.g2)'返回帶有上下文的函數。考慮這個:var x = object.getName; X();'。這就是發生的事情。 –
好了,現在我明白了,這是分配和執行的組合,它們會產生不同的行爲。 賦值只傳遞一個沒有附加上下文的函數,上下文由對象提供。 最後,getName2和getName3之間沒有區別。 '// non-strict mode' '(object.getName3 = object.getName)(); // The Window' '(object.getName3)(); // The Object' 謝謝! –