gpt4 book ai didi

javascript - Object.create() 使用

转载 作者:行者123 更新时间:2023-11-30 20:23:46 25 4
gpt4 key购买 nike

我刚刚学习原型(prototype)继承,对 Object.create() 的使用有点困惑。我对以下代码中为什么需要 Object.create() 感到困惑:

function Mammal (name){
this.name = name;
this.offspring = [];
}

Mammal.prototype.haveBaby = function (){
var baby = new Mammal('Baby ' + this.name);
this.offspring.push(baby);
return baby;
}

function Cat (name, color){
Mammal.call(this, name);
this.color = color;
}

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

function Cat(name, color){ Mammal.call(this, name) } 不传递来自 Mammal 的方法吗?这就是我们需要 Object.create() 的原因吗?

最佳答案

Object.create 是在 v1.8.5 中作为 alternative way 引入的指定对象的原型(prototype)。上面代码的实际区别在于它更简洁一些,因为在设置原型(prototype)时不会冗余地调用 Mammal 构造函数。

您可以使用以下语法在上述模式中获得相同的输出:

Cat.prototype = new Mammal();

但是这里 new 关键字会冗余地调用构造函数,因为

Mammal.call(this, name);

然后通过将 this 设置为 Cat 实例再次显式调用 Mammal。这样就在 Cat 实例(不是原型(prototype))上设置了 nameoffspring。根据此 classical inheritance example,这是一种 super 构造函数模式.

原型(prototype)链使 haveBaby() 可用于所有 Cat 实例和所有 Mammal 实例。唯一真正的区别是该链中的中间 Mammal 实例与空对象。

关于javascript - Object.create() 使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51155118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com