javascript - 为什么内部函数中当前对象的方法未定义?

标签 javascript

在外部函数中,this.foo是bar,这就是我所期望的。然而,在内部函数中,this.foo 是未定义的,这非常令人惊讶。有人能帮我解决这个问题吗?谢谢。

var myObject = {
    foo: "bar",
    func: function () {
        console.log("outer func:  this.foo = " + this.foo);
        (function () {
            console.log("inner func:  this.foo = " + this.foo);
        }());
    }
};
myObject.func();

最佳答案

在外部函数中,this引用了myObject,因此可以正确引用和访问foo。

但是,在内部函数(这是一个闭包)中,this 不再引用 myObject。因此, this.foo 在内部函数中未定义(在 ECMA 5 之前,内部函数中的 this 将引用全局窗口对象;而从 ECMA 5 开始,内部函数中的 this 将是未定义的。) 为了解决这个问题,我们可以在引用它之前将其存储在像 self 这样的局部变量中。

var myObject = {
    foo: "bar",
    func: function () {
        var self = this;
        console.log("outer func:  self.foo = " + self.foo);
        (function () {
            console.log("inner func:  self.foo = " + self.foo);
        }());
    }
};
myObject.func();

关于javascript - 为什么内部函数中当前对象的方法未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27310385/

相关文章:

javascript - 如何从嵌套组件发出,同时保持引用函数外部变量的能力

javascript - React JSX 文件给出错误 "Cannot read property ' createElement' of undefined"

javascript - 如何调整 flex 盒中可折叠元素的比例

javascript - 仅使表格中突出显示的单元格值

javascript - 创建事件函数在创建时执行

javascript - Jest( react 测试工具)错误 - 解析错误 : Line 1: Illegal import declaration

javascript - ng-repeat 对象属性,但在输入后散焦输入框

javascript - 看起来很简单,为什么这行不通?

javascript - 解析 : ParseError { code: 101, 消息: 'Object not found.' }

javascript - 如何在运行时检查类 B 是否扩展 A