function Aaa(name){
this.colors = ["red","blue","green"];
this.name = name;
}
function Bbb(){
Aaa.call(this,"BbbName");
}
let instance1 = new Bbb();
instance1.colors.push("black");
let instance2 = new Bbb();
console.log(instance1.colors);//["red", "blue", "green", "black"]
console.log(instance2.colors);//["red", "blue", "green"]
console.log(instance1.name);//BbbName
- 通过call方法,Bbb构造函数上运行了
Aaa.call(this)
,给Bbb的this赋予了colors属性。 - 相比于原型链,盗用构造函数的一个优点是可以在子类构造函数中像父类构造函数传参。
- 盗用构造函数的缺点:必须在构造函数中定义方法,因此函数不能重用。此外子类也不能访问父类原型上定义的方法,因此所有类型只能使用构造函数模式。