js oop 继承

1.原型链继承

    子类原型继承父类实例

    弊端:共享一个父类实例  不方便传参

2.借用构造函数继承

    使用 call apply 直接复制父类属性到子类构造函数中

    弊端:只能访问父类属性 不能访问父类原型链属性

3.组合继承(原型链继承 + 借用构造函数继承

    借用构造函数继承方法继承属性 子类原型指向父类实例用来借用原型链属性

    弊端:多次使用了相同的属性 不过也是相对可取的继承方式

4.原型继承

function object(o) {
    function F() {}
    F.prototype = o;
    return new F();
}

    直接指向对象(对象就没有了构造函数对象的限制) 不指向实例 (应该是没有父类原型链属性这一说)

    弊端:共享同一个对象 与1同样的弊端

5.寄生式继承

    直接给原型继承返回的实例添加属性进行本地属性包装

6.寄生组合继承 

    直接指向父类的原型 借用的都是原型链中的属性 

    再调用call apply 继承本地属性  比较完美的继承方式

综上:

    给出一个比较好的继承写法:

function extend(subType, superType){
	function F() {};
	F.prototype = superType.prototype;
	subType.prototype = new F();
	subType.prototype.constructor = subType;
}
function superClass(){
	this.name = "superClass";
}
superClass.prototype.test = function(){
	alert(this.name);
}
function subClass(){
	superClass.apply(this, arguments);
}
extend(subClass, superClass);
var sub = new subClass();
sub.test()


你可能感兴趣的:(js oop 继承)