javascript继承的6种方式

Table of Contents

第一种:原型链继承:

function Animal(){
  this.property="都要呼吸";
}
Animal.prototype.getProperty = new function(){
  return this.property;
}
function Person(){
  this.feature="直立行走";
}
Person.prototype = new Animal();
Person.prototype.getFeature = function(){
  return this.feature;
}
var p1 = new Person();
console.log(p1.getProperty());
console.log(p1.getFeature());

第二种:借用构造函数继承:

function Animal(){
  this.property="都要呼吸"this.getProperty=function(){
    return this.property;
  };
}
function Person(){
  Animal.call(this);
  this.feature="直立行走";
}
Person.prototype.getFeature = function(){
  return this.feature;
}
var p1 = new Person();
console.log(p1.getProperty());
console.log(p1.getFeature());

第三种:组合继承:(最常用的继承模式)

function Animal(){
  this.property="都要呼吸";
}
Animal.prototype.getProperty = function(){
  return this.property;
};
function Person(){
  Animal.call(this);
  this.feature="直立行走";
}
Person.prototype = new Animal();
Person.prototype.constructor = Person;
Person.prototype.getFeature = function(){
  return this.feature;
};
console.log(Person.getProperty());
console.log(Person.getFeature());

第四种:原型式继承

var animal = {
  property: "都要呼吸"; 
  getProperty: function(){
    return this.property;
  }
};
function person(animal){
  function Person(){
    this.feature="直立行走";
  } 
  Person.prototype=animalPerson.prototype.getFeature(){
    return this.feature;
  } 
  return new Person();
};
var p1 = person(animal);
console.log(p1.getProperty());
console.log(p1.getFeature());

ECMAScript 5通过新增Object.create()方法规范化了原型式继承。

var animal = {
  property: "都要呼吸"; 
  getProperty: function(){
    return this.property;
  }
}
var p1 = Object.create(
  animal, 
  {
    feature: {
      value: "直立行走"
    }, 
    getFeature: {
      value: function(){
        return this.feature;
      }
    }
  }
);
console.log(p1.getProperty());
console.log(p2.getFeature());

第五种:寄生式继承

var animal = {
  property: "都要呼吸"; 
  getProperty: function(){
    return this.property;
  }
};
function person(animal){
  var p1 = Object.create(
    animal, {
      feature: {
        value: "直立行走"
      }
    }
  ); 
  p1.getFeature = function(){
    return this.feature;
  }; 
  return p1;
}
var p1 = person(animal);
console.log(p1.getProperty());
console.log(p1.getFeature());

第六种:寄生组合式继承

function Animal(){
  this.property="都要呼吸";
}
Animal.prototype.getProperty=function(){
  return this.property;
}
function Person(){
  Animal.call(this);
  this.feature="直立行走";
}
function inheritPrototype(Person, Animal){
  var person=Object.create(Animal.prototype); 
  person.constructor=Person; 
  Person.prototype=person;
}
inheritPrototype(Person, Animal);
Person.prototype.getFeature=function(){
  return this.feature;
}
var p1 = new Person();
console.log(p1.getProperty());
console.log(p1.getFeature());