Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:当一个对象有多个实例时,如何从事件处理程序中获取正确的对象实例_Javascript_Class_Onclick_Call_Instance - Fatal编程技术网

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
错误只是一个输入错误。