js继承方法之构造函数继承(apply)

function Animal(name){
  this.name=name
  this.say=function(){
    console.log( name + ' miao miao miao' )
  }
  this.arr= [1];//解决了原型链继承,引用属性会共享的问题
}
Animal.prototype.eat = function(food){ //无法继承prototype里的属性
  console.log(this.name + '吃' + food)
}


function Cat(name){
  Animal.apply(this,arguments)
  
}

let final = new Cat('小猫');//可以向父类传参
final.arr.push(2);
let final2 = new Cat('大猫');

console.log(final.arr) //[1,2]
console.log(final2.arr)//[1]

有个不好的地方,就是子类都有父类函数的副本(父类里this的属性),影响性能。而且也不能通过prototype共享一些共同的方法

你可能感兴趣的:(js继承方法之构造函数继承(apply))