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

时间:2018-03-22 14:56:23

标签: javascript

我最近一直在使用JavaScript,在花了几个月之后,我仍然对一些内部构件感到困惑。

具体来说,我试图围绕所谓的here

我所知道的

  1. JavaScript中的所有函数(内置和用户创建)都是对象(function objects
  2. general objectsfunction objects之间的区别在于function objects实现[[Call]]属性(因此可以调用)
  3. 所有function objects实现.prototype属性,该属性表示使用function object作为构造函数创建的所有对象的原型
  4. 问题

    1. 所有Standard Built-In Objects实际上是function objects(即构造函数)吗?
    2. 是否所有(且仅限)function objects实施.prototype
    3. 正确的条款是general object还是function object
    4. 谢谢。

2 个答案:

答案 0 :(得分:1)

  1. 不,如果您尝试将newSymbol一起使用,则某些内置函数会抛出异常。(<{li}>)
  2. 原型概念仅适用于函数,尽管您可以使用Object.create()
  3. 创建一个对象,并将其作为原型链中的直接父项创建。
  4. 所有函数都是对象,但并非所有对象都是函数。
  5. 为了阐明2,所有对象都有一个原型链,其中零个或多个对象排列在(有效)列表中。基于构造函数.prototype值自动设置新对象的原型链仅适用于函数,但这类似于重复,因为函数是唯一可以构造函数的东西。

答案 1 :(得分:1)

  

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

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

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

  

所有标准内置对象实际上都是对象吗?

没有。考虑MathJSONAtomicsReflect内置对象。它们根本不起作用。

  

函数对象(即构造函数)?

没有。考虑parseIntJSON.stringifyArray.prototype.slice函数(以及更多全局变量,静态和原型方法)。他们根本不是建设者。

  

所有(且唯一的)函数对象是否实现.prototype

没有。 .prototype属性没有什么特别之处,只是在使用function构造实例时,它通常用于new。但是每个对象都可以拥有或不具有.prototype属性。

  

正确的术语是普通对象还是功能对象?

不,&#34;一般对象&#34;不是官方用语。如果必须,我会将它们命名为不可调用的对象和callable objects。(后一项在规范中使用)。