2

原型函数bar在其他地方执行,在 Node.js 环境中(bind应该可用)。我希望this内部bar()函数成为我的对象的实例

var Foo = function (arg) {
    this.arg = arg;

    Foo.prototype.bar.bind(this);
};

Foo.prototype.bar = function () {
    console.log(this); // Not my object!
    console.log(this.arg); // ... thus this is undefined
}

var foo = new Foo();
module.execute('action', foo.bar); // foo.bar is the callback 

...为什么bar()记录undefinedthis不是我的实例?为什么调用没有改变执行上下文bind

4

1 回答 1

6

Function.bind返回一个值 - 新绑定的函数 - 但您只需丢弃该值。Function.bind不会改变this(即它的调用上下文),也不会改变它的参数 ( this)。

有没有其他方法可以获得相同的结果?

在构造函数内部执行它实际上是错误的,因为bar存在于Foo.prototype,因此将其绑定到任何一个实例Foo都会中断this所有其他Foo.bar调用!将其绑定到您想要的位置

module.execute('action', foo.bar.bind(foo));

或者——甚至更简单——根本不定义bar原型:

var Foo = function (arg) {
    this.arg = arg;

    function bar () {
        console.log(this);
        console.log(this.arg);
    }

    this.bar = bar.bind(this);
};

var foo = new Foo();
module.execute('action', foo.bar);
于 2013-02-18T22:10:08.220 回答