javascript - 如何从事件处理程序中引用对象实例

标签 javascript jquery

在下面的代码中,从 handleClick() 引用对象实例是否有比将其作为全局对象引入更好的方法?

var Widget = function() {
  this.property = 'value';
  this.bindEvents();
}

Widget.prototype = {

  bindEvents: function() {
    $('button').on('click', this.handleClick);
  },

  handleClick: function() {
    var self = window.Widget;

    console.log(self.property);
  }
}

window.Widget = new Widget();

question问同样的事情,(未接受的)答案是将回调传递给 $.on() 并从那里调用处理程序,将实例作为参数传递,如下所示:

bindEvents: function() {
  var self = this;

  $('button').on('click', function() {
    self.handleClick.apply(self);
  });
}

这种传递实例的技术真的是正确的方法吗,或者除了我展示的两种方法之外还有更好的方法吗?

最佳答案

该对象可以作为 eventData 传递给 on(),如下所示:

var Widget = function () {
    this.property = 'value';
    this.bindEvents();
}

Widget.prototype = {

    bindEvents: function () {
        $('button').on('click', {o: this}, this.handleClick);
    },

    handleClick: function (e) {
        var widgt = e.data.o;
        console.log(widgt.property);
    }
}

window.Widget = new Widget();

FIDDLE

这使事件处理程序的范围保持原样。

关于javascript - 如何从事件处理程序中引用对象实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18600102/

相关文章:

javascript - 如何根据从json数组接收的动态值显示div内容?

javascript - 获取鼠标指针上的文本框字

javascript - 以编程方式添加/删除由 Material ui 生成的类

javascript - 尝试使用 .innerHTMLlog 打印数据出现错误 Uncaught TypeError : undefined is not a function

jquery - Google Maps API V3 回调(KML 加载)

javascript - 在 Ace 编辑器中将我的值推到自动完成列表的顶部

javascript 月、日、年检查

javascript - 如何在文本区域中显示所有 CSS 选择器和属性?

javascript - 如何在单击按钮时打开下拉菜单?

jquery - 我需要创建一个新的 "instance"吗?