如果父类是通过混合模式声明的,子类如何继承?
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 星