在下面的代码中我声明了两个类" 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);
感谢名单。
答案 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();