Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:所有标准内置对象实际上都是构造函数吗?_Javascript - Fatal编程技术网

JavaScript:所有标准内置对象实际上都是构造函数吗?

JavaScript:所有标准内置对象实际上都是构造函数吗?,javascript,Javascript,我最近一直在潜心研究JavaScript,在花了几个月的时间之后,我仍然对一些内部内容感到困惑 具体地说,我是想把我的头绕在所谓的 我所知道的 JavaScript中的所有函数,无论是内置的还是用户创建的,都是对象(函数对象) 常规对象和函数对象之间的区别在于函数对象实现了[[Call]]属性(因此可以被调用) 所有函数对象实现.prototype属性,该属性表示使用函数对象作为构造函数创建的所有对象的原型 问题 是否所有的标准内置对象实际上都是函数对象(即构造函数) 是否所有(且仅限于)功能对

我最近一直在潜心研究JavaScript,在花了几个月的时间之后,我仍然对一些内部内容感到困惑

具体地说,我是想把我的头绕在所谓的

我所知道的

  • JavaScript中的所有函数,无论是内置的还是用户创建的,都是对象(
    函数对象
  • 常规对象
    函数对象
    之间的区别在于
    函数对象
    实现了
    [[Call]]
    属性(因此可以被调用)
  • 所有
    函数对象
    实现
    .prototype
    属性,该属性表示使用
    函数对象
    作为构造函数创建的所有对象的原型
  • 问题

  • 是否所有的
    标准内置对象
    实际上都是
    函数对象
    (即构造函数)
  • 是否所有(且仅限于)
    功能对象实现了
    .prototype
  • 正确的术语是
    通用对象
    还是
    功能对象
  • 多谢各位

  • 不,如果您尝试将某些内置函数与
    new
    一起使用,则会引发异常(
    Symbol
  • 原型概念仅适用于函数,尽管您可以使用
    object.create()
  • 所有函数都是对象,但并非所有对象都是函数
  • 为了说明2,所有对象都有一个原型链,其中零个或多个对象(有效地)排列在一个列表中。基于构造函数函数
    .prototype
    值的新对象原型链的自动设置仅适用于函数,但这有点重复,因为函数是唯一可以成为构造函数的东西

    所有函数对象都实现
    .prototype
    属性,该属性表示以函数对象作为构造函数创建的所有对象的原型

    不,只有构造函数才能做到这一点。有些函数没有构造函数(即它们有[[call]]但没有[[construct]]内部方法),当您尝试将它们与
    new
    一起使用时,它们会抛出一个错误(有些函数有[[construct]]内部方法,但仍然抛出)

    从技术上讲,甚至构造函数也不一定需要
    .prototype
    。您可以实现可以构造但没有
    .prototype
    属性的内置项。然而,所有本机构造函数确实都有一个

    所有标准内置对象都是功能对象吗

    < >不考虑“代码>数学< /代码>,<代码> JSON<代码>,<代码> Atomics < /代码>或<代码>反映< /COD>内置对象。它们根本不是函数

    函数对象(即构造函数)

    不考虑“<代码> PARSETIN < /COD>”、“代码> JSON、StrugIng/<代码>或<代码>数组.Trimult.Studio函数(以及更多的全局、静态和原型方法)。他们根本不是建设者

    是否所有(且仅)函数对象都实现了
    .prototype

    不需要。
    .prototype
    属性没有什么特别之处,只是在使用
    新建
    构造实例时,它通常用于
    函数
    。但每个对象都可以有或不能有
    .prototype
    属性

    正确的术语是通用对象还是函数对象


    不,“一般对象”不是官方术语。我会给它们命名为不可调用对象,如果有必要的话(规范中使用了后一个术语)。

    谢谢你的建议。令人惊讶的是,MDN(以及整个web)对内置和对象包装、构造函数以及
    .prototype
    属性vs proto(原型链)缺乏良好的高层解释。关于第3点的后续问题:它是否被称为
    一般对象
    功能对象
    ?这些是官方条款吗?关于第2点:所有其他对象从中下降的所谓的
    全局对象
    (原型链接)实际上是
    对象。原型
    ,而不是
    对象
    ,对吗?最后,关于1:
    Symbol
    是一个原语,但大多数其他内置是
    函数对象
    ?我所知道的对象与函数对象之间没有“官方”术语;一般来说,人们在谈论/书写对象时使用“对象”,在谈论功能时使用“功能”。函数实际上是对象,你可以用普通对象做的任何事情都可以用函数(添加属性、删除属性等)。内置的
    符号实际上是一个函数(因此也是一个函数对象)。谢谢Bergi。但是只有构造函数本身具有
    .prototype
    属性?常规对象(即非功能对象)默认不具有此属性吗?我想它只对构造函数才有意义,因为它用于设置用该函数创建的新对象的
    \uuuu proto\uuuu
    。另外,
    通用对象
    是不是不是不是
    函数对象
    的正式术语?@Magnus Well
    {prototype:123}
    是一个本机对象,它有一个,但不是函数(构造函数或其他)。是的,我不知道有哪一个内置的看起来像这样,但没有什么可以阻止它。@Magnus它们是内部的。检查一个对象不会显示它们(与该对象的许多其他对象一样)。请注意,
    [[scopes]]
    \uuuuu proto\uuuuu
    也不是实际的属性,它们只是显示来表示一些内部值。@Magnus否。甚至不能保证这些值确实存在于引擎实现中。它们只在t中使用