带有类实例的Object问题

时间:2017-01-14 00:30:46

标签: javascript

我有一个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

怎么了?

2 个答案:

答案 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的上下文中。如果直接使用变量,它的工作没有问题。

See JSFiddle