我很难理解如何访问位于我创建的对象文字的一个方法中的this
。
以下是一个例子:
var app = {
click: function(e) {
e.preventDefault();
console.log('Clicked');
this.saywhat();
},
saywhat: function() {
console.log('Say what ?');
}
};
var link = document.querySelector('a');
link.addEventListener('click', app.click);
如果点击该链接,我会收到此错误:Uncaught TypeError: this.saywhat is not a function
。如何从saywhat()
内部提供click()
? (我想找到一个解决方案,我不会被迫使用app.saywhat()
)
答案 0 :(得分:3)
那是因为事件处理程序中的this
是事件注册的元素,即link
。
在您的情况下,您可以使用app.saywhat()
,也可以使用Function.prototype.bind
明确指定this
使用的内容。也就是说,
link.addEventListener('click', app.click.bind(app));
答案 1 :(得分:2)