了解使用javascript调用()链接构造函数

了解使用javascript调用()链接构造函数,javascript,inheritance,Javascript,Inheritance,我试图理解用javascript的调用函数链接构造函数。我在看一个例子 我复制并粘贴了示例: 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; } functi

我试图理解用javascript的调用函数链接构造函数。我在看一个例子

我复制并粘贴了示例:

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);
让我感到困惑的是,食品和玩具的调用函数是在它们的构造函数中调用的,但是直到我们调用object.createProduct.prototype几行之后,对象才被创建。。。至少我是这么想的


在此处创建的继承对象具体在哪里?当我们进行Product.call时,到底发生了什么?是否正在创建产品实例?这与Object.createProduct.prototype有什么关系

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

var cheese = new Food('feta', 5);
var fun = new Toy('robot', 40);
在实例化函数构造函数之前,先声明食物和玩具,并将其原型设置为产品实例。这在以下行中发生:

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);

此行将调用产品构造函数,在调用产品构造函数时将食品或玩具实例分配给它,同时传入名称和价格参数。如果您熟悉Java,这与在派生类中调用超级构造函数有点相似。

也许下面的答案有助于澄清一些事情:给出的答案是好的和正确的,您可以这样标记。