我创建了两个对象:
Cat延伸哺乳动物。两个对象都有构造函数,它接受一个名为config的参数。我试图在Cat的构造函数中覆盖Mammals构造函数,但我得到了奇怪的结果:
function Mammal(config) {
this.config = config;
console.log(this.config);
}
function Cat(config) {
// call parent constructor
Mammal.call(this, config);
}
Cat.prototype = new Mammal();
var felix = new Cat({
"name": "Felix"
});
在控制台中打印:
undefined fiddle.jshell.net/_display/:23
Object {name: "Felix"}
为什么父构造函数被调用两次?为什么,当它第一次被调用时,this.config是未定义的?我正在分配财产。你能帮我修一下这段代码吗?
答案 0 :(得分:1)
它被调用两次,因为你用Cat.prototype = new Mammal()
来调用它。您是通过从Mammal
的实例复制而不是从“原型”Mammal
复制来创建原型。
正确的行是:
Cat.prototype = Object.create(Mammal.prototype);