Javascript 模块模式:将原型方法绑定/解除绑定到$(窗口)

Javascript 模块模式:将原型方法绑定/解除绑定到$(窗口),javascript,jquery,Javascript,Jquery,我正在使用模块模式查询样板文件编写一个名为test的插件 请看这把小提琴: 我们有两个div。对于每个部门: x在$window scroll上启动。 单击div时触发destroy。这将解除scroll方法的绑定。 问题:destroy方法将x从所有实例中解除绑定,而不仅仅是针对单击的特定实例 我是否错误地使用了jQuery.proxy?如何正确地将plugin.prototype中的方法绑定到$window或从$window中解除绑定?$。代理每次使用时都会生成一个新函数。将其与.off一起

我正在使用模块模式查询样板文件编写一个名为test的插件

请看这把小提琴:

我们有两个div。对于每个部门:

x在$window scroll上启动。 单击div时触发destroy。这将解除scroll方法的绑定。 问题:destroy方法将x从所有实例中解除绑定,而不仅仅是针对单击的特定实例


我是否错误地使用了jQuery.proxy?如何正确地将plugin.prototype中的方法绑定到$window或从$window中解除绑定?

$。代理每次使用时都会生成一个新函数。将其与.off一起使用将无法按预期工作,因为.off需要原始函数,而不是相同的函数。如果要将处理程序绑定到所有元素,则无法将此处理程序仅删除到匹配集中的一个特定元素。可能是一个解决办法:
Plugin.prototype = {

  bind: function() {
    this.element.addClass( 'active' );
    $( window ).on( 'scroll.' + pluginName, $.proxy( this.x, this ) );
    this.element.on( 'click.' + pluginName, $.proxy( this.destroy, this ) );
  },

  destroy: function() {
    this.element.removeClass( 'active' );
    $( window ).off( 'scroll.' + pluginName, $.proxy( this.x, this ) );
    // unbinds scroll for all instances!
  },

  x: function() {
    console.log( 'x' );
  }

}