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();
}

你可能感兴趣的:(js 中的几种继承方法)