我把这种情况的缺乏理解归结为这个小问题.到目前为止,我认为这是我所知道的:
我有一个对象myDog(一个全局变量).Dog有一个成员变量el是一个html元素; 因为它是一个元素,我可以添加事件监听器.因此,当您单击时myDog.el,它会向控制台记录this.name和的值myDog.name.正如预期的那样,范围this.name是未定义的并且myDog.name是'tye'.当由click事件监听器调用时,this内部Dog.speak引用被单击的元素,即成员变量el,而不是对象Dog.由于它myDog是一个全局变量,因此无论函数的范围如何,它都可以进行备份,并且可以myDog.name很好地完成.
见下面的代码:
function Dog(name,id) {
this.name = name ? name : "spot";
this.id = id ? id : "dog";
this.el = document.getElementById(this.id); // given there is a div with a matching
this.el.addEventListener("click",this.speak); // ignore IE for simplicity (attachEvent has its own 'this' scope issues)
}
Dog.prototype = {
speak: function() …Run Code Online (Sandbox Code Playgroud)