【发布时间】:2017-02-24 15:26:12
【问题描述】:
如果我跑:
var dog = {
sound: "woof",
talk: function(){
console.log(this.sound)
}
}
document.addEventListener("click",dog.talk)
未定义已记录;只有当我将狗绑定到它的功能时 - document.addEventListener("click",dog.talk.bind(dog)) - 它才有效。
为什么需要将狗绑定到它的方法上?
函数没有像正常一样在狗身上被调用——只有事件数据作为参数传递?
【问题讨论】:
-
当对象调用talk方法时,this将引用调用者对象,因此this将引用调用者对象而不是dog对象。
-
你在全局文档上设置了点击事件监听器。这意味着每次点击(无论在哪里),您都会触发您提供的
dog.talk函数。 -
你想完成什么?获取用户点击的 HTML 元素?
标签: javascript oop object scope this