JS继承方式总结

1、构造函数绑定方式

function A(){
        this.a = 1;
}

function B(){
        A.apply(this, arguments);
        this.b = 2;    
}
var b = new B();
b.a; //1

优点:简单易懂
缺点:无法继承父类A的原型里的属性和方法

2、原型模式

function A(){
         this.a = 1;
}

A.prototype.aa = 11;

function B(){
        his.b = 2;
}

B.prototype = new A();

B.prototype.constructor = B;

var b = new B();

b.a; //1

b.aa; //11

优点:子类可以继承父类A的原型里的属性和方法

缺点:创建子类实例需要多次创建父类对象,消耗内存

3、直接继承prototype

function A(){
    this.a = 1;
}
A.prototype.aa = 11;

function B(){
    this.b = 2;
}

B.prototype = A.prototype;
B.prototype.constructor = B;

var b = new B();
b.a; //1
b.aa; //11

优点:子类可以继承父类A的原型里的属性和方法,无需创建父类对象

缺点:父类A的原型对象被修改,其constructor属性指向了子类B

4、原型链继承

function A(){
    this.a = 1;
}
A.prototype.aa = 11;

function B(){
    A.apply(this, arguments);
    this.b = 2;
}

B.prototype.__proto__ = A.prototype;
//或者
//Object.setPrototypeOf(B.prototype, A.prototype);

var b = new B();
b.a; //1
b.aa; //11

优点:具有上述其他方式的优点

缺点:需要高版本的浏览器支持

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,138评论 1 32
  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,591评论 8 265
  • 腾讯具有高并发、高可靠的即时通信能力;利用 腾讯云通信 提供的 SDK 可以将即时通信功能快速集成到自己的 APP...
    michael_jia阅读 3,140评论 2 4
  • 尘生我觉得,我可能真的喜欢你,比你喜欢康雨枚还要喜欢的那种,可能你觉得挺惊讶的,其实我也惊讶,我觉得大概每...
    蓝桉sama阅读 131评论 0 0
  • 我是一个如风般的女子,淡然而随性,可谁说风没有心呢?正因为习惯了孤独,才不会觉得孤独,正因为没有归属,才不去寻求安...
    行云_luo阅读 564评论 4 15