了解使用javascript调用()链接构造函数
我试图理解用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
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,这与在派生类中调用超级构造函数有点相似。也许下面的答案有助于澄清一些事情:给出的答案是好的和正确的,您可以这样标记。