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
时候,定义私有属性: