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达到真正的继承