gpt4 book ai didi

javascript - 为什么需要使用 Object.create()

转载 作者:行者123 更新时间:2023-11-29 10:42:57 26 4
gpt4 key购买 nike

这是我的代码:

function Product(name, price) {
this.name = name;
this.price = price;

if (price < 0) throw RangeError('Invalid');
return this;
}

function Food(name, price) {
Product.call(this, name, price);
this.category = 'food';
}
Food.prototype = Object.create(Product.prototype);
var cheese = new Food('feta', 5);

当我在控制台中检查变量时,我看到以下内容:
食物{名称:“feta”,价格:5,类别:“food”}

这是我所期望的。

但是,如果我省略 Object.create(Product.prototype) 我会看到相同的结果,因为Product.call

也就是说, 在这种情况下最佳做法是什么? Object.create(Product.prototype) 甚至是继承所必需的,如果是,为什么?

最佳答案

这一行

Product.call(this, name, price);

效果与

相同
this.name = name; //argument name from the function constructor
this.price = price; //likewise, argument of function constructor

但它没有设置 Food 对象的原型(prototype)属性。用这条线

Food.prototype = Object.create(Product.prototype);

它确保如果查找了 Food 对象的属性而 JavaScript 找不到,它将遵循原型(prototype)链到 Product.prototype

让我们详细说明你的例子

function Product(name, price) {
this.name = name;
this.price = price;

if (price < 0) throw RangeError('Invalid');
return this;
}

并添加一个函数来计算税收

Product.prototype.calculateTax = function() {
return this.price * 0.1;
}

现在有了这条线

Food.prototype = Object.create(Product.prototype);

以下将正确计算税金

var cheese = new Food('feta', 5);
console.log(cheese.calculateTax());

省略那行

//Food.prototype = Object.create(Product.prototype);

它会给出错误TypeError: Object # has no method 'calculateTax'

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

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