我有一个holder对象,我插入了Class实例。
var instances = {};
$.each(response.data, function(index, value) {
instances[value.platform.toLowerCase()] = new FetcherClass(value.platform, value.type, value.tempo, value.max);
});
value.platform 是新实例的名称。
所有似乎都运行良好,但是当我想调用实例中的函数时,总是触发最后一个实例的函数。
例如:
instances.name1.start();
如果有'name1','name2'和'name3'实例,则触发的start()函数属于'name3'实例。
这里我在对象'实例'的控制台中发布输出。
对象名称1:FetcherClass nam2:FetcherClass name3:FetcherClass name4:FetcherClass name5:FetcherClass name6:FetcherClass name7: FetcherClass name8:FetcherClass name9:FetcherClass name10: FetcherClass proto :对象
指向示例的链接:JSFiddle
怎么了?
答案 0 :(得分:2)
你自己有一个偶然的全局变量。第一次调用构造函数时,会创建一个名为_SELF的新全局变量;对构造函数的后续调用替换了它,使得对象的所有实例都引用了最新的实例。
在FetcherClass的构造函数中声明一个变量,然后使用它。
function FetcherClass(plataforma, type, interval, faults) {
var SELF = this;
SELF.PLATAFORMA = plataforma.toLowerCase();
SELF.TYPE = type;
SELF.INTERVAL = interval;
SELF.MAX_INTENTOS = faults;
SELF.start = function() {
alert('I am '+SELF.PLATAFORMA);
}
}
答案 1 :(得分:0)
您的问题存在于_self
的上下文中。如果直接使用变量,它的工作没有问题。