我有一个问题,我有一个名为“foo”的对象,需要在另一个对象“bar”上调用回调函数,并且我需要在回调函数中使用“bar”的上下文。但关键是,“foo”除了从“bar”获取其回调函数外,不应知道任何关于它的信息。
示例:
var foo =
{
message: "Hello foo",
doStuff: undefined
};
var bar =
{
message: "Hello bar",
callback = function ()
{
alert(this.message);
}
};
foo.doStuff = bar.callback;
foo.doStuff();
我知道通常你会使用"call"或"apply"来将上下文切换到bar,但在我的特定情况下,在调用foo.doStuff()
时,我不再拥有关于回调来源的信息。那么是否有另一种方法来确定上下文(比如从回调函数本身中)?
foo.doStuff = bar.callback.bind(bar);
或foo.doStuff = function () {bar.callback.call(bar)};
,这两种写法实际上是等价的。bind
方法在幕后所做的事情就是将函数绑定到指定的对象上,而第二种写法则是手动使用call
方法来将函数绑定到指定的对象上。 - João Paulo Macedobar.callback.call(bar)
在功能上与bar.callback()
完全相同。 - Alex Wayne