parent ist die übergeordnete Klasse, child erbt parent. Wenn der Wert von sex der child-Instanz geändert wird, führt dies dazu, dass sex von parent und anderen Unterklasseninstanzen geändert wird
Kann diese Art von Objekttypattributen nur im Konstruktor platziert werden, oder ist vereinbart, dass das Objektattribut im Prototyp nicht geändert werden darf, um die Auswirkungen von Unterklasseninstanzen auf die übergeordnete Klasse und andere Unterklassen zu vermeiden? Gibt es noch eine andere Lösung?
function extend(p, c) {
var f = function () {};
f.prototype = p.prototype;
c.prototype = new f();
c.prototype.constructor = c;
}
function parent() {}
parent.prototype.aaa = 123;
parent.prototype.sex = ['男', '女'];
function child() {}
extend(parent, child);
c1 = new child();
c2 = new child();
console.log('设置实例c1之前,父类的sex值:',parent.prototype.sex);
console.log('设置实例c1之前,实例c2的sex值:',c2.sex);
c1.sex.push('其他');
console.log('设置实例c1之后,父类的sex值:',parent.prototype.sex);
console.log('设置实例c1之后,实例c2的sex值:',c2.sex);
这个方式可以让子类和对象访问 sex 的时候,如果 sex 不存在则为其创建一个父类 sex 的副本,存在则直接返回。
子类定义一个同名属性, 覆盖父类的?
非方法的属性不推荐设置在原型上
在初始化子类
child
时候,定义私有属性: