分为两个方向去解决
组合继承的方法 Super构造函数会被调用两次--这是缺点
function Father(){ this.value = [1,2,3,4,5]; } Father.prototype.getValue = function(){ return this.value; } function Son(){ // Father.call(this); } Son.prototype = new Father(); var son1 = new Son(); //尝试通过子类更改父类属性 son1.value.push(5); //引用值类型是无法改变父类的属性好方法了 console.log(son1.value); console.log(son1.getValue());
//子类可以找到父类的属性和方法,但是并不能更改父类的属性和方法
最好的继承方法 --寄生组合的继承方式(即圣杯模式)
如下:
function inherit(Target,Origin){ function F(){}; Origin.prototype = F.prototype; Target.prototype = new F(); Target.prototype.constructor = Target; Target.prototype.uber = Origin.prototype; }
圣杯继承