面向对象中对象的继承与优化
类的继承
1.借助函数实现
function Parent1(){
this.name = 'parent1'
}
function Child1(){
Parent.call(this)
// 该 Parent 函数运行的上下文,更改了类的指向
// 即将父级的构造函数指向指向子级的构造函数
this.type = 'child1'
}
// 缺点:parent1上原型链的属性没有办法继承
2.原型链继承
function Parent1(){
this.name = 'parent1'
}
function Child2(){
this.type='child2'
}
Child2.prototype= new Parent1()
缺点:原型链上的属性要是修改,就都变了
3.组合方式继承
functon Parent3(){
this.name='parent'
}
function Child3(){
Patent3.call(this)
this.play=''child3'
}
Child3.propotype= new Parent3()
缺点: 子类的实例化时, 父类的构造函数实例化两次
4.组合继承的优化1
functon Parent3(){
this.name='parent'
}
function Child3(){
Patent3.call(this)
this.play=''child3'
}
var child = new Child3()
child.prototype=Parent3().prototype
缺点:Child3的constructor 就变成 Parent3.constructor指向相同
组合继承优化 2
function Parent5(){
this.name='parent5'
this.play=[1,2,3]
}
function Child5(){
Parent5.call(this)
this.type='child5'
}
Child5.prototype = Object.create(Parent5.prototype)
Child5.proptotype.constructor=Child5