javascript - 当方法绑定到事件侦听器时,"this"未定义

yar*_*rat 0 javascript this event-listener addeventlistener

我已经尝试通过阅读它来了解this关键字所指的内容.好吧,那没有帮助.所以请帮我这个!
手动函数调用与事件监听器绑定的区别在哪里?

var app = {
    foo: true,
    bar: function() {
        console.log("this",this.foo);
        console.log("app",app.foo);
    }
}

app.bar();
/*  this true
    app true    */

document.addEventListener("click", app.bar);
/*  this undefined
    app true    */
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

Art*_*oev 5

在你的document.addEventListener this意志里面document,因为你正在调用一个document对象的函数.当您app.bar()直接呼叫时,出于同样的原因this引用app对象.
如果要引用,app则必须手动重新定义函数的上下文,使用bind():

document.addEventListener("click", app.bar.bind(app));
Run Code Online (Sandbox Code Playgroud)