0

在这段代码中,触发器会调用 topbar.resize 还是只是简单地运行其中包含的函数?我假设两者之间存在上下文差异,或者它是如何工作的?

jQuery.bind("hideBackstage", topbar.resize);

编辑:我如何让它只是简单地调用topbar.resize?

4

3 回答 3

1

调用将相当于

topbar.resize.call(touchedElement, jqueryWrappedEvent);

也就是说,“包含”的函数topbar.resize将使用接收者(this)调用已接收事件的元素,并使用参数调用事件(包装为 jquery 事件)。

这不同于

topbar.resize()

因为

  • 接收器 ( this) 不会topbar
  • 事件作为参数提供

编辑后编辑:

如果您只想调用等效于topbar.resize(),只需执行以下操作:

jQuery.bind("hideBackstage", function(){topbar.resize()});
于 2012-09-26T12:59:21.433 回答
0

您可以使用 jQuery 代理或

jQuery.bind("hideBackstage", function(){
    topbar.resize.apply(topbar, arguments); // seting context as topbar for resize.
});
于 2012-09-26T12:59:31.497 回答
0

您可以使用$.proxy()(有趣的是类似于Function.prototype.bind())。

jQuery.bind("hideBackstage", $.proxy(topbar.resize, topbar));

但是,您将无权访问该event对象。

于 2012-09-26T13:01:34.840 回答