我有一个构造函数Monkey():
function Monkey(name, age) {
this.name = name;
this.age = age;
}
Run Code Online (Sandbox Code Playgroud)
我想创建另一个以Human()额外属性命名的构造函数,该属性cars将存储该人拥有的汽车数量以及Monkey具有(如和)的所有属性nameage
我不想重复Monkey新Human内容中的所有内容.是可以克隆Monkey并与扩展属性的原型?
我试过这段代码,我想这就是你想要的:
function Human(name,age,cars){
Monkey.call(this,name,age);
this.cars = cars;
}
Run Code Online (Sandbox Code Playgroud)
这样,Human构造函数将Monkey构造函数作为普通函数调用,但将其命名空间设置为新Human对象.因此,在这种情况下,this关键字内部Monkey构造函数引用类的对象Human,而不是Monkey.,使用此代码,条件new Human() instanceof Human;返回true,因为我没有返回新的实例Monkey,只是使用它的构造函数.
此外,正如您所说,您可以"克隆"原型.这样做:
Human.prototype = Monkey.prototype;
Run Code Online (Sandbox Code Playgroud)
编辑
正如@Bergi amd所建议的那样,克隆原型的最佳方法是使用Object.create方法,如下所示:
Human.prototype = Object.create(Monkey.prototype, {constructor:{value:Human}});
Run Code Online (Sandbox Code Playgroud)