在侦听器方法中访问对象属性

时间:2016-09-02 15:26:48

标签: javascript

假设我有以下代码:

AUTO

如何在侦听器中访问对象属性(和方法)?我会假设我需要将它作为参数传递?我在走这个结构错误的方式吗?

2 个答案:

答案 0 :(得分:1)

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

要解决此问题,请使用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({});




答案 1 :(得分:1)

根据@Tushar的建议,您可以使用Function.prototype.bind()并传递this.property作为参数

<body>
  click
  <script>
    var Obj = function() {
        var obj = this;
        this.property = 1;
        this.arr = [document.body];
        for (var i = 0; i < obj.arr.length; i++) {
          obj.arr[i].addEventListener("click"
          , obj.listener.bind(obj.arr[i], obj.property), false);
        }
      }
    // note order of parameters; e.g., `prop`, `e`
    Obj.prototype.listener = function(prop, e) {
      console.log(prop, e); // `1`, `event` object
    }
    var a = new Obj();
  </script>
</body>