gpt4 book ai didi

javascript - 使用 javascript 的 call() 理解链式构造函数

转载 作者:行者123 更新时间:2023-11-28 08:32:28 24 4
gpt4 key购买 nike

我正在尝试使用 javascript 的 call 函数来理解链接构造函数。我正在查看 here 中的示例.

我复制并粘贴了示例:

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

if (price < 0)
throw RangeError('Cannot create product "' + name + '" with a negative price');
return this;
}

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

function Toy(name, price) {
Product.call(this, name, price);
this.category = 'toy';
}
Toy.prototype = Object.create(Product.prototype);

var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);

我感到困惑的是,FoodToycall 函数是在它们的“构造函数”中调用的,但是对象直到我们调用 Object.create(Product.prototype) 几行之后才创建......或者我是这么认为的。

这里继承的对象到底是在哪里创建的?当我们执行Product.call时到底发生了什么?它是在创建 Product 的实例吗?这与 Object.create(Product.prototype) 有什么关系?

最佳答案

对象在调用构造函数的这两行中被声明和实例化:

var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);

在实例化函数构造函数 FoodToy 之前,会先声明它们,并将它们的原型(prototype)设置为 Product 的实例。这发生在以下几行中:

function Food(name, price) {/*omitted*/}
Food.prototype = Object.create(Product.prototype);

function Toy(name, price) {/*omitted*/}
Toy.prototype = Object.create(Product.prototype);

关于对父构造函数的调用:

 Product.call(this, name, price);

此行将调用 Product 构造函数,在调用中将 FoodToy 实例分配给 this Product 构造函数,同时传入名称和价格参数。如果您熟悉 Java,这与在派生类中调用 super() 构造函数略有相似。

关于javascript - 使用 javascript 的 call() 理解链式构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21674385/

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