如果父类是通过混合模式声明的,子类如何继承?
function Animal(name,age,color){ this.name = name this.age = age this.color = color } Animal.prototype = { type: 'pet', say : function(){ console.log('hi~~') console.log('color:' + this.color) } } function Cat(name, age, color) { Animal.apply(this, arguments) } Cat.prototype = new Animal() Cat.prototype.constructor = Cat var cc = new Cat('qiuqiu',3,'black') console.log(cc.name) console.log(cc.type) cc.say()
如果父类是通过混合模式声明的,那么子类继承的时候也要继承两次吗?
4
收起
正在回答
1回答
同学的理解是可以的,混合声明子类继承:将原型链和借用构造函数的技术组合在一起。原理是:使用原型链实现对原型属性和方法的继承,而通过借用构造函数实现对实例属性的继承
优点:
(1)可以继承实例属性/方法,也可以继承原型属性/方法
(2)既是子类的实例,也是父类的实例
(3)不存在引用属性共享问题
(4)通过call继承父类的基本属性和引用属性并保留能传参的优点
(5)函数可复用
缺点:子类原型上有一份多余的父类实例属性,因为父类构造函数被调用了两次,生成了两份,而子类实例上的那一份屏蔽了子类原型上的。
希望可以帮到你!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星