您可以将函数绑定到上下文而不执行它,就像call
/apply
一样。使用bind
。
例如:
function Thing() {
this.val = 1;
}
Thing.prototype.some = function() {
console.log('thing');
};
Thing.prototype.foo = {
bar: function() {
console.log(this.val);
}
}
var thing = new Thing();
// bind instance's `foo.bar` to `thing` instance
thing.foo.bar = thing.foo.bar.bind(thing);
// now you can call it without providing `thing` as the context every time like wit apply/call
console.log(thing.foo.bar());
它是事件可能结合foo.bar
到东西的一个实例,但随后的事情的每一个实例已foo.bar
绑定到的事情的共享实例。我不知道这是否是一个好主意,但它种工作方式:
function Thing() {
this.val = 1;
}
Thing.prototype.some = function() {
console.log('thing');
};
Thing.prototype.foo = {
bar: function() {
console.log(this.val);
}.bind(new Thing())
}
var thing = new Thing();
console.log(thing.foo.bar());
我想真正让我想要的方式的必由之路,那么,会遍历这些方法和'bind'在构造函数中。这太糟糕了。谢谢 – bevacqua