1.直接调用原型

1 function Father(){
2     this.son = []
3     this.name = ""
4 }
5 function Son(){
6 
7 }
8 Son.prototype = new Father()

这种方法简单,但是有弊端,就是当原型上有引用类型的时候,改变原型的引用类型的话,所有实例都会受到影响

2.利用构造函数

function Father2(){
    this.son = []
    this.name = ""
}
function Son2(){
    Father2.call(this)

这种方法利用了call函数,指定了新的this对象,弊端:不能继承函数

3.组合使用

function Father3(){
    this.son = []
    this.name = ""
}
function Son3(){
    Father3.call(this)
    this.age = 18
}
  Father3.prototype.say = function(){
   console.log("hello")
  }
Son3.prototype = new Father3()
Son3.prototype.constructor = Son3

注意:Son3.prototype.constructor = Son3  这不可少,因为指定了新的原型之后,每个实例上都会从原型继承一个属性constructor(本来是Father3),需要改变对象的constructor达到真正的继承