假设我有以下代码:
AUTO
如何在侦听器中访问对象属性(和方法)?我会假设我需要将它作为参数传递?我在走这个结构错误的方式吗?
答案 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>