咱们伟大的javascript创始人布兰登.艾奇仅用10天时间就创造了一门这么伟大的语言,以至于真正认识了这门语言的时候,有种掉坑里的感觉。
闲话不多扯,虽然这门语言漏洞百出,但它是当今最流行的脚本之一,证明它的魅力还是蛮大的,下面我就说一下在这个语言中继承的主要实现方式。常用的分为两种:组合继承、寄生组合式继承
这是构造函数源代码
function TestA(){
this.arr=[0,3,4];
}
TestA.prototype.getArr=function(){
alert(this.arr);
}
function TestB(){
TestA.call(this);
}
一、组合继承
var TestB.prototype=new TestA();
TestB.prototype.constructor=TestB;
var b=new TestB();
b.getArr();
*这种继承方式有一个明显的弊端:每继承一次都会在当前对象原型中复制不必要的属性和值,但是这是行业里比较多见的继承方式,大概只是因为这种方法比较简单
二、寄生组合式继承
function wrapObj(obj){
var O=function(){};
O.prototype=obj;
return new O();
}//通过寄生式返回继承了obj对象的O对象
function inheritClass(A,B){
var b=wrapObj(B.prototype);
b.constructor=A;
A.prototype=b;
}//通过原型式由A继承了B的原型方法(注意:此处没有继承属性)
inheritClass(TestB,TestA);
var b=new TestB();
b.getArr();
寄生组合式继承弥补了组合继承的弊端,可以省去给不必要的原型属性赋值,是目前比较科学的js对象的继承方式
总结:虽然这两种方式都可以实现继承,但是性能方面会有区别,具体使用哪种还要视项目而定