原型函数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()
日志undefined
和this
不是我的实例?为什么执行上下文没有被bind
调用改变?
答案 0 :(得分: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);