javascript - 在监听器方法中访问对象属性

标签 javascript

假设我有以下代码:

var Obj = function() {
   this.property = 1;
   this.arr = [...] // array containing elements we want to add event listeners to
   for (...) {
      this.arr[i].addEventListener("click", this.listener, false);
   }
}

Obj.prototype.listener = function() {
   console.log( this.property ); // DOES NOT WORK! *this* does not point to Obj.
}
var a = new Obj();

如何访问监听器中的对象属性(和方法)?我认为我需要将它作为参数传递?我处理这个问题的方式在结构上是错误的吗?

最佳答案

当该函数作为事件监听器调用时,上下文 (this) 将更改为对象本身以外的其他内容。

<小时/>

要解决此问题,请使用 bind() 将上下文手动绑定(bind)到构造函数中的对象实例。 。这样,this 将始终指向对象实例,与调用上下文无关:

var Obj = function() {
  this.property = 'foo';
  this.listener = this.listener.bind(this);
}

Obj.prototype.listener = function() {
  console.log(this.property);
}

var a = new Obj();
a.listener.call({});

关于javascript - 在监听器方法中访问对象属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39295940/

相关文章:

javascript - 如何跳过数组.map 的元素?

javascript - 为什么div隐藏但不显示?

javascript - 带函数的setTimeout和不带函数的setTimeout有什么区别?

javascript - 在 <% 标签内交织 EJS 和 Javascript 变量

javascript - 绑定(bind)两个输入,以便即使其中之一被用户更改,它们也会显示相同的文本

javascript - 最佳实践 : Handle read-only data with Redux

javascript - 无法使用方法(传递)索引作为参数从数组中检索数据

javascript - Onclick 不应触发表单数据提交

javascript - Materialize.css 自动完成 - 如何使用 minLength = 0 打开列表

javascript - 如何在我的变量中使用本地存储值?