JavaScript原型'这个'问题

时间:2012-12-21 20:27:31

标签: javascript

这是我上一期提问的后续问题。

Simple javascript prototype issue

我使用JavaScript prototype有点新鲜,很抱歉第二篇文章。

我想将点击的元素id分配给this.name数组。

task.prototype.init=function(){  
      this.name=[];  //this.name array has to be defined here

        for (var i; i<5; i++){
            var Link=document.createElement('a');
                Link.innerHTML='click';
                Link.id=value[i];   //I want to assign the value to the this.name array
                Link.href='#'
                Link.onclick=this.changeName;
                document.body.appendChild(Link);
         }
}
task.prototype.changeName=function(){  

     //How do I push the this.id to the property this.name?

     //the code below won't work because this refer to the <a> element. 
     this.name.push(this.id);     

    return false;
    }

任务提示?

2 个答案:

答案 0 :(得分:15)

您的原型没问题,问题是事件处理程序上的this始终是导致事件被触发的元素。 In JavaScript, the value of this inside a function depends on how the function is called

如果希望this绑定到某个值,可以使用Function.prototype.bind创建绑定函数:

var newChangeName = this.changeName.bind(this);
Link.onclick = newChangeName;

但请注意bind仅限IE9 +。解决方法是:

var that = this;
Link.onclick = function() {
    that.changeName();
};

(样式说明:我使用link而不是Link; js中的约定是将大写首字母留给构造函数。)

答案 1 :(得分:1)

使用bindthis回调设置所需的changeName

Link.onclick=this.changeName.bind(this);