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 为 Web 开发人员编写的专业 Javascript 第 7 章中的示例。

4

1 回答 1

2

函数的上下文取决于它的调用方式。在您的最后一个示例中,您使用了一个分组运算符(一对括号),它返回对 . 引用的函数的引用object.getName。它失去了object.

然后当您调用该函数时,由于它丢失了上下文object并且您在严格模式下运行,因此上下文成为全局对象并且thisundefined. 您可以强制该函数在上下文中运行object,例如,将其显式绑定到它:

(object.getName3 = object.getName).bind(object)(); // The Object
于 2013-04-12T08:32:25.343 回答