引用正确的'这个'没有重新声明这个'嵌套函数内部

时间:2016-08-17 01:41:46

标签: javascript node.js

我有一个包含多个方法和属性的类。其中一种方法有一个嵌入在其中的setTimeout()函数:

function myClass() {
    this.some_property = "test";
    this.PrintOnTimeout = function() {
        // I can do var.self = this;
        // but I can't help but feel like that would be inefficient
        setTimeout(function timeoutPrint() {
            // I want to reference this.some_property here.
            // Currently this.some_property returns an error as
            // this refers to PrintOnTimeout() rather than myClass().
        });
    }
}

如果在StackOverflow上有答案,请提前道歉。我环顾四周,但几乎所有我发现的关于扩展类和super()的讨论。也许super()就是这里的答案,我不理解它?我使用全局,但我更倾向于将此类的每个实例视为可能未识别的。所以,如果有这个.GetMainParent或者什么......否则,我很欣赏升级。

编辑1:目标不是通过'这个' in,这是显而易见的,而是从一组嵌套函数内的任何地方引用主块(或任何特定块,如果你设置它)。

编辑2:箭头功能是我需要的解决方案,如ASDFGerte所示。

1 个答案:

答案 0 :(得分:1)

您可以使用arrow function绑定它,使用bind(this)或关闭存储属性的本地变量。

请注意,除非将它绑定到所涉及的每个函数,否则您需要确保始终在正确的上下文中调用所有相关函数,否则您将嵌套函数绑定到错误的:

function a(){
  this.x = "hi";
  this.y = function() {
    setTimeout(() => { console.log(this.x); }, 100);
  };
}

let obj = new a();
let outside = obj.y;
obj.y(); //y is being called with this === obj
outside(); //y is being called with this depending on strict mode, window or undefined.