javascript:对于同一类的不同对象,复制不同变量中的数组

时间:2015-08-15 17:22:31

标签: javascript arrays prototype

在下面的代码中我声明了两个类" person"的对象。 问题是,当其中一个变量(" Courses")时,我使用push方法更新其值,以便将它们复制到 proto 中,因此两个对象共享相同的&# 34;课程"里面的数组 proto 。我希望他们有自己独特的阵列。

var person = {
    Name: "John",
    Grade: 0,
    Courses:[],
    setGrade : function(y){
        this.Grade=y;
    },
    setCourse:function(t){
        this.Courses.push(t);

    },
}

var grade9 = Object.create(person);
grade9.setCourse("eng");
grade9.setCourse("math");
grade9.setGrade(9);

var grade10 = Object.create(person);
grade10.setCourse("phy");
grade10.setCourse("chem");
grade10.setCourse("bio");
grade10.setGrade(10);

debug output

感谢名单。

2 个答案:

答案 0 :(得分:1)

创建一个工厂方法,并在内部为具有当前实例的特定属性的属性掩盖:

function createNewPerson() {
    return Object.create(person, { // object.create with propertiesObject to overshadow original Courses property 
        Courses: { writable: true, configurable: true, value: [] }
    });
}

var grade9 = createNewPerson();
grade9.setCourse("eng");
grade9.setCourse("math");
grade9.setGrade(9);

var grade10 = createNewPerson();
grade10.setCourse("phy");
grade10.setCourse("chem");
grade10.setCourse("bio");
grade10.setGrade(10);

答案 1 :(得分:0)

Object.create返回一个对象,其prototype属性设置为传入的对象。 '实例'对象委托给原型。 相同的原型。在C语言中,它们都有指向同一结构(原型)的指针,并且修改它会改变所有'实例的值。对象(他们只指向它)。虽然这并不完全准确,但对于我们这里的目的来说已经足够了。如果您希望所有人都拥有独立的副本,则必须添加它们:

personFactory = function() {
    newPerson = Object.create(person);
    newPerson.array = [];
}

myPerson = personFactory();