js 中的几种继承方法

1. 原型链继承:方法的原型是某个类的实例,即可继承这个类的所有属性和方法。父类私有和公有的属性都变为子类公有的。( 因为子类和父类还有联系,子类.proto 可以修改原型链上的属性,所有出现了以下四种继承法?)

function A(){
  this.x = 100;
}
A.prototype.getX = function(){
  console.log(this.x);
};
function B(){
   this.y = 200;
}
B.prototype.sayHello = function(){
  console.log(20000);
};
B.prototype = new A();
B.prototype.constructor = B;
function C(){
  this.c = 300;
}
C.prototype.sayC = function(){
  console.log("ccc");
}
C.prototype = new B();

2. call 继承:把父类私有的变为子类私有的。

function A(){
  this.x = 100;
}
function B(){
  A.call(this);
}
var n = new B();
n.x;  // 100

3. 冒充对象继承:把父类私有的和公有的克隆一份给子类作为私有。

function A(){
  this.x = 100;
}
A.prototype.getX = function(){
    console.log(this.x);
}
function B(){
  var temp = new A();
  for(var key in temp){    
    this[key] = temp[key];   
  }
  temp = null;
}
var n = new B();

4. 混合模式继承:原型继承 + call 继承,父类私有的变为子类私有的,父类私有和共有的都变为子类公有的。

function A(){
  this.x = 100;
}
A.prototype.getX = function(){
    console.log(this.x);
}
function B(){
  A.call(this);
}
B.prototype = new A();  // B.prototype.x = 100   私有属性重复继承。
B.prototype.constructor = B;
var n = new B();
n.getX();

5. 寄生组合式继承:父类私有的变为私有的(call 继承),父类公有的变为子类公有的。

function A(){
  this.x = 100;
}
A.prototype.getX = function(){
    console.log(this.x);
}
function B(){
  A.call(this);
}
//B.prototype = Object.create(A.prototype);
B.prototype = objectCreate(A.prototype); // 兼容
B.prototype.constructor = B;
var n = new B();
n.getX();

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

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,915评论 2 17
  • class的基本用法 概述 JavaScript语言的传统方法是通过构造函数,定义并生成新对象。下面是一个例子: ...
    呼呼哥阅读 4,130评论 3 11
  • 在ES5继承的实现非常有趣的,由于没有传统面向对象类的概念,Javascript利用原型链的特性来实现继承,这其中...
    Daguo阅读 25,944评论 10 44
  • 面向对象 * 单利模式 * 工厂模式 * 构造函数模式 * 原型模式 * call,apply,bind * 继承...
    web前端ling阅读 248评论 0 1
  • js中常用的继承方式:子类继承父类的方法 1、原型继承 子类的原型指向父类的一个实例 父类的私有和公有方法都是子类...
    风两般的男人阅读 346评论 0 1