在JavaScript OOP中调用Parent的构造函数

时间:2013-06-07 09:55:45

标签: javascript prototypal-inheritance

我创建了两个对象:

  • 哺乳动物

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是未定义的?我正在分配财产。你能帮我修一下这段代码吗?

http://jsfiddle.net/DS7zA/

1 个答案:

答案 0 :(得分:1)

它被调用两次,因为Cat.prototype = new Mammal()来调用它。您是通过从Mammal实例复制而不是从“原型”Mammal复制来创建原型。

正确的行是:

Cat.prototype = Object.create(Mammal.prototype);