无法访问对象litteral中的“this”

时间:2015-05-26 18:42:40

标签: javascript object this object-literal

我很难理解如何访问位于我创建的对象文字的一个方法中的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()

2 个答案:

答案 0 :(得分:3)

那是因为事件处理程序中的this是事件注册的元素,即link

在您的情况下,您可以使用app.saywhat(),也可以使用Function.prototype.bind明确指定this使用的内容。也就是说,

link.addEventListener('click', app.click.bind(app));

答案 1 :(得分:2)

使用.bind

link.addEventListener('click', app.click.bind(app));

Example