gpt4 book ai didi

javascript - JavaScript 如何知道我正在编写函数还是构造函数?

转载 作者:行者123 更新时间:2023-12-01 02:36:10 25 4
gpt4 key购买 nike

我目前正在通过我的机构学习 JavaScript,并且正在阅读有关 JavaScript 中函数如何成为对象以及它如何具有原型(prototype)的内容(不知道原型(prototype)是什么,因为类(class)从未解释原型(prototype)是什么)。如果您有 Java 背景,您可能会明白这对我来说是多么令人困惑。我决定在 Google 上搜索有关函数如何成为对象的任何引用资料,并不断发现您可以编写如下所示的构造函数:

function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}

但我知道常规函数是这样写的:

function multiplyNumbers(a, b) {
return a * b;
}

那么 JavaScript 如何知道我何时创建常规函数以及何时创建构造函数(如果它们的编写方式几乎相同)?

最佳答案

事实并非如此。在 class 主体中使用 function 关键字或 constructor 声明的任何函数都可以通过在使用new调用。除非函数显式返回一个对象,否则调用返回的值是调用创建的新对象。新对象可以在构造函数内通过 this 进行引用。

由函数创建的对象实例(通过使用new关键字将其作为构造函数调用)将其原型(prototype)链初始化为函数的值 对象的 prototype 属性。

函数对象的 prototype 属性是在声明函数或类或者计算函数或类表达式时创建的。如果使用的关键字是 function,则可以更改 prototype 属性的值,但不能更改类声明/表达式。然而,原型(prototype)对象的属性在这两种情况下都可以修改,并且随后由对象实例继承。

箭头函数不支持作为构造函数调用 - 它们没有 prototype 属性。

快乐学习“JavaScript 原型(prototype)继承如何工作”!

<小时/>附:

存在以大写字母开头的类和构造函数名称的约定,以将它们与“常规”函数区分开来,但没有这样做的语法要求。

常规函数(不使用 new 调用)可以有一个 this 值,该值取决于函数的定义和调用方式。 “this 的值如何在 JavaScript 函数中设置”是您可能希望单独查找的主题。

关于javascript - JavaScript 如何知道我正在编写函数还是构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47896606/

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