Javascript:当一个对象有多个实例时,如何从事件处理程序中获取正确的对象实例
我创建了一个对象,当我有一个对象实例时,它工作得非常好。这不是实际对象,但概念是相同的Javascript:当一个对象有多个实例时,如何从事件处理程序中获取正确的对象实例,javascript,class,onclick,call,instance,Javascript,Class,Onclick,Call,Instance,我创建了一个对象,当我有一个对象实例时,它工作得非常好。这不是实际对象,但概念是相同的 function foo(name){ this.name = name; } foo.prototype.CreateElement = function(){ var newElement = document.createElement("a"); that = this; newElement.onclick = function(){ that.
function foo(name){
this.name = name;
}
foo.prototype.CreateElement = function(){
var newElement = document.createElement("a");
that = this;
newElement.onclick = function(){
that.SayName(this);
};
document.getElementsByName("body")[0].appendChild(newElement);
}
foo.prototype.SayName = function(LinkObj){
alert(this.name);
LinkObj.href = "http://google.com";
}
我被告知,通过将this
的实例保存到一个变量(在本例中为that
),我仍然可以获得对SayName
方法的正确对象实例的引用。这将使This
表示从onclick
传入的元素的实例。这一切似乎只适用于一个实例,但当我创建多个对象实例时,最后一个实例就是onclick
事件中提供的实例
我像这样初始化两个对象
var ObjOne = new foo("Ted");
ObjOne.CreateElement();
var ObjTwo = new foo("Steve");
ObjTwo.CreateElement();
当onclick
为ObjOne
触发时,我得到ObjTwo
的对象实例,因此这个.Name
设置为Steve
有人知道当onclick事件从不同的实例触发时,如何获得正确的对象实例吗?我假设我需要使用调用
绑定正确的实例,但我不确定如何绑定
提前感谢,希望这不会让人困惑。问题在于这行:
that = this;
您在未使用var
的情况下声明了that
,这意味着它是全局的,也就是说,您的所有实例都在更新该变量的同一全局。改为这样做:
var that = this;
然后,
将是每个的本地。(也就是说,CreateElement函数的每个闭包都是局部的。)
演示:
另外,document.getElementsByName
应该是document.getElementsByTagName
(假设您实际上没有给body一个与“body”相等的name属性)。非常感谢,就这样做了!getElementsByName
错误只是一个输入错误。