这是我上一期提问的后续问题。
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;
}
任务提示?
答案 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)
使用bind
为this
回调设置所需的changeName
:
Link.onclick=this.changeName.bind(this);