Nodejs无法访问方法中的对象成员

时间:2017-04-26 09:06:41

标签: node.js oop ecmascript-6

我在构造函数中设置了一个变量,我无法从其中一个方法访问它,因为“this”指的是函数(不应该是这种情况)。 这就是它看起来像:

class myMiddleware {
    constructor(variable) {
        this.variable = variable;
    }
    middleware(packet, next) {
        console.log(this.variable)
    }
}

我正在使用VS 2017以防万一。

编辑:我正在使用它作为socket.io套接字中间件。 这就是我这样做的方式:

 const myInstance = new myMiddleware(myVariable);
 socket.use(myInstance.middleware);

1 个答案:

答案 0 :(得分:3)

在评论中解释 robertklep 发布的解决方案:

instance.test.bind(instance)

通常在调用这样的方法时:

x.method();

x(无论它是什么)在调用函数this时绑定到x.method

如果您有一个y对象并执行了此操作:

y.method = x.method;

然后当你打电话:

y.method();

y将作为this而不是x传递。

这也意味着当你这样做:

method = x.method;

并尝试致电:

method();

原始x不会被绑定为this - 这是您的问题。您将该方法作为函数参数传递,从而丢失了流程中的原始实例对象。您传递方法的功能无法知道您希望将哪个对象绑定为this

但是所有JavaScript函数都有一个名为.bind()的方法,该方法返回一个函数,该函数使用绑定为this的正确对象调用您的方法。

所以这个:

let f = x.method.bind(x);

使f()函数或多或少等同于:

function f(...args) {
  return x.method(...args);
}

或:

let f = (...a) => x.method(...a);

如果您愿意,可以绑定其他对象:

let f = x.method.bind(y);
即使x没有这样的方法,

也可以在.method()对象上调用y' y