我期待getName2和getName3的行为相同,但getName3会抛出错误(在非严格模式下打印'The Window')
"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的Web开发人员专业Javascript第7章中的示例。
答案 0 :(得分:2)
函数的上下文取决于如何调用。在最后一个示例中,您使用grouping operator(一对括号)返回对object.getName
引用的函数的引用。它失去了object
的背景。
然后当你调用该函数时,由于它丢失了object
的上下文并且你在严格模式下运行,因此上下文成为全局对象,this
是undefined
。您可以强制该函数在object
的上下文中运行,例如,将其显式绑定到它:
(object.getName3 = object.getName).bind(object)(); // The Object