相关疑难解决方法(0)

处理包含由事件监听器调用的"this"关键字的Object方法中的Scope

我把这种情况的缺乏理解归结为这个小问题.到目前为止,我认为这是我所知道的:

我有一个对象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)

javascript oop events scope

4
推荐指数
1
解决办法
570
查看次数

标签 统计

events ×1

javascript ×1

oop ×1

scope ×1