【问题标题】:Javascript - Why are "function constructors" called "function constructors"?Javascript - 为什么“函数构造函数”称为“函数构造函数”?
【发布时间】:2016-01-14 09:07:12
【问题描述】:

我的导师正在谈论函数构造函数...

var neighbor = new Person()  

它提出了一个问题,自从我开始学习 Javascript 以来一直困扰着我:

为什么称它们为“函数构造器”? 毕竟它们不构造函数;他们构造对象。为什么不是“对象构造函数”?

我知道它们是“构造”的函数,也许这就是名字的由来,但我仍然觉得这个名字很混乱。

我错过了什么吗?

【问题讨论】:

  • 我称之为“构造函数”,而不是“函数构造函数”。我不记得曾经听说过使用后一个术语。
  • 那不是函数构造函数。这是一个函数构造函数:developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 仅仅因为它在 Udemy 上并不意味着编写该课程的人值得学习。无论如何,你似乎对术语很感兴趣。当你用new 实例化一个对象时,它的名字根本不重要。重要的是它是如何工作的以及它是如何使用的。你的精力最好花在构建有用的东西上,而不是试图弄清楚某个词的含义。
  • 该术语实际上在本文档的顶部使用:developer.mozilla.org/de/docs/Web/JavaScript/Reference/…。不过,我想我开始明白了。这是一个名为“constructor”的函数。如,“满足我的新功能,构造函数。”也许?
  • 我以前没听过这个词(当然这没有任何意义)。我只能推测这意味着传统 JavaScript 中的构造函数采用常规函数的形式,与其他语言不同,它们必须位于类内部并具有特定名称。
  • @RyanScharfer 不,这是对实际命名为 Function 的类的 构造函数(函数) 的引用。

标签: javascript constructor


【解决方案1】:

它们之所以被称为constructor functions,是因为它们与new 一起使用时可用于创建对象的实例。

使用构造函数

  • 通过编写构造函数来定义对象类型。有一个强有力的约定,有充分的理由,使用大写首字母 信。

  • 使用 new 创建对象的实例。

【讨论】:

    【解决方案2】:

    在类型化和“强”对象语言(如 Java、C++ 或 C#)中,构造函数、函数和方法是非常不同的东西,它们的行为显然不一样。

    但是 javascript 不是强类型的。对于 javascript,构造函数只是一个基本函数,仅此而已。您可以不使用 new 关键字调用函数,如果您的函数不使用关键字 this,它将返回一个对象(但可能为空)。

    所以它被称为“构造函数”,因为这是一个函数,但是我们(编码器)将它用作构造函数。

    【讨论】:

      【解决方案3】:

      不确定是否完全正确。当您使用new 运算符时,您实际上是在构造一个新对象。如果你运行console.log(neighbor.constructor),你会看到它打印出Person函数代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-29
        • 1970-01-01
        • 2011-10-22
        • 2021-01-08
        • 1970-01-01
        • 2020-01-14
        • 1970-01-01
        相关资源
        最近更新 更多