我在MDN网站上看到过这段代码:
01 function Product(name, value){
02 this.name = name;
03 if(value >= 1000)
04 this.value = 999;
05 else
06 this.value = value;
07 }
08
09 function Prod_dept(name, value, dept){
10 this.dept = dept;
11 Product.call(this, name, value);
12 }
13
14 Prod_dept.prototype = new Product();
15
16 // since 5 is less than 1000, value is set
17 cheese = new Prod_dept("feta", 5, "food");
18
19 // since 5000 is above 1000, value will be 999
20 car = new Prod_dept("honda", 5000, "auto");
Run Code Online (Sandbox Code Playgroud)
它说你可以使用调用链构造函数.我有一些问题:
1)为什么第14行被称为为什么我们将它添加到原型中?为什么这意味着在我们创建Prod_dept时调用Product?
2)第11行是什么意思?这与原型有什么关系?
3)第20行是什么意思向我们展示?
1)设置一个实例Product作为原型对象Prod_dept,将该Product实例(及其原型)的值和方法添加到所有Prod_dept实例的原型链中.
它还允许instanceof显示从中创建的对象Product_dept是两个构造函数的实例
var a = new Product();
var b = new Product_dept();
a instanceof Product // true
a instanceof Product_dept // false
b instanceof Product // true
b instanceof Product_dept // true
Run Code Online (Sandbox Code Playgroud)
2)因为this是由构造的新对象Prod_dept,所以.call允许您将该对象设置为方法的this值Product,这样无论该Product方法如何处理都this将在该新Prod_dept实例上完成(在这种情况下,运行用于添加值的代码)name和value属性).
3)它只是从Prod_dept构造函数创建一个新实例.
总的来说,这是使用JavaScript的原型继承机制的一种模式.
1) 第 14 行使 Prod_dept 继承 Dept 对象 - 任何时候实例化 Prod_dept 时,它都会使用 Dept 作为基础对象。
2) 第 10 行只是将单词“auto”和“food”存储在对象的 .dept 属性中。
3)第20行:实例化Prod_dept时,JS也会实例化一个Dept对象,并且该构造函数(第1行)限制参数value最多为999(第3-6行)