8

这是我上一个问题的后续问题。

简单的javascript原型问题

我对使用 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;
    }

任务的任何提示?

4

2 回答 2

15

您的原型没问题,问题是this事件处理程序上始终是导致事件被触发的元素。在 JavaScript 中,this函数内部的值取决于函数的调用方式

如果要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 中的约定是将大写首字母留给构造函数)。

于 2012-12-21T20:32:35.040 回答
1

用于bind设置所需thischangeName回调:

Link.onclick=this.changeName.bind(this);
于 2012-12-21T20:34:01.013 回答