一.什么是继承性
通常来说继承就类似于儿子继承父亲的财产,但这样说明并不准确,因为这代表父亲将财产给了儿子,父亲自己就没有了,但在JavaScript面向对象中,继承更像师傅与徒弟的关系,师傅将一生所学教给了徒弟,徒弟学会了,但是师傅也没有失去什么,这就是JavaScript面向对象中的继承性。
二.继承方法
接下来看有几种继承方式,和它们的利弊:
1.原型链继承
function GaoBW() {
this.fang = '大别也';
this.che = '五菱宏光';
}
function Parent(n, m) {
this.name = n
this.age = m
}
Parent.prototype = new GaoBW()
var tc = new Parent('王铁锤', 30)
console.log(tc.name, tc.age, tc.fang, tc.che);
console.log(tc.constructor);
原理:将Parent的原型对象指向GaoBW ,这样Parent的实例化对象也能继承GaoBW的属性
缺点:这么做,会存在继承链紊乱,tc是通过构造函数Farent()创建出来的。但是继承过以后,会发现,tc的构造函数,不在Farent,而是GaoBW
解决办法:手动的纠正继承链
Parent.prototype.constructor = Parent
最终得到的结果:
Parent的实例化对象继承到了GaoBW的属性,并且也证明了是Parent的实例化对象
2.使用prototype直接继承
function GaoBW() {
}
GaoBW.prototype.fang = '大别也';
GaoBW.prototype.che = '五菱宏光';
function Parent(n, m) {
this.name = n
this.age = m
}
Parent.prototype = GaoBW.prototype
Parent.prototype.constructor = Parent
var tc = new Parent('王铁锤',