我有一个构造函数Monkey()
:
function Monkey(name, age) {
this.name = name;
this.age = age;
}
我想创建另一个名为 Human()
的构造函数,它带有一个额外的属性 cars
,它将存储该人拥有的汽车数量以及 的所有属性猴子
有(如name
和age
)
我不想在新的Human
内容中重复所有Monkey
内容。是否可以克隆 Monkey
并使用 prototype 扩展属性?
最佳答案
我试过这段代码,我想这就是你想要的:
function Human(name,age,cars){
Monkey.call(this,name,age);
this.cars = cars;
}
这样,Human
构造函数调用 Monkey
构造函数作为普通函数,但将其命名空间设置为新的 Human
目的。因此,在这种情况下,this
里面的关键词Monkey
构造函数引用类 Human
的对象,而不是 Monkey.
此外,使用此代码,条件 new Human() instanceof Human;
返回 true
,因为我没有返回 Monkey
的新实例, 只需使用它的构造函数。
另外,正如您所说,您可以“克隆”原型(prototype)。只需这样做:
Human.prototype = Monkey.prototype;
编辑
正如@Bergi amd 所建议的,克隆原型(prototype)的最佳方法是使用 Object.create method ,如下:
Human.prototype = Object.create(Monkey.prototype, {constructor:{value:Human}});
关于javascript - 如何在 JavaScript 中克隆构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14312951/