gpt4 book ai didi

javascript - javascript 中的 .call 是如何工作的?

转载 作者:数据小太阳 更新时间:2023-10-29 05:16:49 26 4
gpt4 key购买 nike

我在 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");

它说你可以调用链构造函数。我有一些问题:

1) 为什么调用第 14 行,为什么我们将它添加到原型(prototype)中,为什么这意味着在我们创建 Prod_dept 时调用 Product?

2) 第 11 行是什么意思?这与原型(prototype)有什么关系?

3) 第 20 行意在向我们展示什么?

最佳答案

1) 将 Product 的实例设置为 Prod_dept 的原型(prototype)对象,添加该 Product 实例(及其原型(prototype))的值和方法) 到所有 Prod_dept 实例的原型(prototype)链。

它还允许 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

2) 因为 this 是由 Prod_dept 构造的新对象,.call 允许您将该对象设置为 Product 方法的 this 值,因此无论 Product 方法对 this 做什么,都将在新的 上完成Prod_dept 实例(在本例中,运行用于将值添加到 namevalue 属性的代码)。

3) 它只是从 Prod_dept 构造函数创建一个新实例。

总的来说,这是一种使用 JavaScript 的原型(prototype)继承机制的模式。

关于javascript - javascript 中的 .call 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6523229/

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