0

我创建了两个对象:

  • 哺乳动物

猫延伸了哺乳动物。这两个对象都有构造函数,它接受一个名为 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/

4

1 回答 1

1

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

正确的行是:

Cat.prototype = Object.create(Mammal.prototype);
于 2013-06-07T09:57:40.130 回答