三种常见继承

1.原型继承

function A (){
    this.name = 'Jack';
}

function B (){
    this.type = 'type';
}

B.prototype = new A();

var b = new B();

console.log(b instanceof A);  // true

2.构造继承

function A (){
    this.name = 'Jack';
}

function B (){
    this.type = 'type';
    A.call(this);
}

var b = new B();

console.log(b instanceof A);  // false

对比

  • 构造函数继承的方法类似于复制,消耗内存
  • 构造函数继承的方法不能改变,而原型继承可以通过改变原型链改变

3.组合模式

  • 方法用原型继承 (公用)
  • 属性用构造继承 (私有)
function A (){
    this.name = 'Jack';
}
A.prototype.output = function(){
  console.log(this.name);  
}

function B (){
    this.type = 'type';
    A.call(this);
}

B.prototype = new A();

var b = new B();

b.output();  // 'Jack'

参考:http://web.jobbole.com/83319/

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

推荐阅读更多精彩内容

  • 博客内容:什么是面向对象为什么要面向对象面向对象编程的特性和原则理解对象属性创建对象继承 什么是面向对象 面向对象...
    _Dot912阅读 1,471评论 3 12
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,274评论 30 472
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,419评论 11 349
  • 為何你還要一次次地出現在我的夢裡,毫無預兆的?我好想說一句:事情都過去了這麼久了。可是,剛要說出口,我就害怕...
    赫拉阅读 283评论 0 3
  • Array.from用于将两类对象转为真正的数组:类似数组的对象( array-like object )和可遍历...
    寒梁沐月阅读 801评论 0 0