新实例在javascript继承和原型设计中具有旧值

时间:2015-08-05 20:11:24

标签: javascript prototype prototypal-inheritance

我试图获得多级继承框架的javascript继承。基本上我所构建的是一个抽象实用程序类,它包含我可以在所有其他类中使用的泛型函数(包括像ajax restful方法的自包含简单集合之类的东西)。

下面我有一些通用的抽象类来定义核心函数,这些函数将归入每个类的关键类型。我的其中一种类型'例如,包括其他一种类型的集合'。 (我试图编写一些javascript类来模拟教义实体和实体集合)

我尝试做的其中一件事,因为所有集合都有一个带有primaryId(键)和实体对象(值)的关联数组,我将实际实体列表的定义放在抽象层中。但我很快发现,当我创建多个相同类型的集合时,我创建的任何新集合都已经使用最近填充的前一个集合中的值填充了该属性。

Bare-bones示例:

myUtil = function() {
    this.prop1 = "some value";
};

myUtil.prototype.setVals = function(data,child) {
    child.populate(data);
};

myInter = function() {
    this.vals = {z:'z'};
}

myInter.prototype = new myUtil();
myInter.prototype.populate = function(data) {
    for(i in data) {
        this.vals[i] = data[i];
    }
}

myClass = function(data) {
    // this.vals = {};
    this.vals[0] = 0;

    this.setVals = function(data) {
        // do other stuff specific to inherited class
        myInter.prototype.setVals(data, this);
    }

    // if data was passed in when instantiated, set values
    if(typeof(data) == 'object') {
        this.setVals(data);
    }
}
myClass.prototype = new myInter();

var foo = new myClass({a:'a',b:'b',c:'c'});
var bar = new myClass();
bar.setVals({1:1, 2:2, 3:3});

console.log({foo:foo,bar:bar});

因此,在这个示例中,两个对象实例最终都会出现{a:' a',b:' b',c:' c',z: ' z',0:0,1:1,2:2,3:3}为他们的vals属性。如果我取消注释子级别中this.vals = {}的本地初始设置,则每个都将设置为我设置的值加上0:0而不是z:' z'。

首先,我是以正确的方式做到这一点还是有更好的方法来写出来,以便值属性级联下来,并且当你制作一个新的'时,每个孩子都有一组独特的属性。一个?

我现在可以在子级别声明和修改所有内容,但在其他语言中,我已经做了一些事情,在一个级别初始化属性的一部分数据集并填写特定子类中的剩余部分。有没有办法在js中做这样的事情或者我是否必须进一步拆分数据并写入特定的初始化方法/代码以便每次都获取父级数据?

0 个答案:

没有答案
相关问题