parent為父類,child繼承parent,當修改child實例的sex的值時,會引起parent和其他子類別實例的sex的變更;
這類object類型的屬性是否只能放在建構函式內,或約定好不允許修改prototype中的object屬性,來避免子類別實例對父類別和其他子類別的影響;
有沒有其他的解決方案?
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
時候,定義私有屬性: