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

标签 javascript

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

具体来说,我试图理解所谓的 Standard Built-In Objects .

我所知道的

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

问题

  1. 所有标准内置对象实际上都是函数对象(即构造函数)吗?
  2. 所有(且仅)函数对象都实现.prototype吗?
  3. 正确的术语是通用对象还是函数对象

谢谢。

最佳答案

All function objects implement the .prototype property, which represents the prototype of all objects created with the function object as a constructor

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

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

Are all the Standard Built-In Objects actually function objects?

没有。考虑 MathJSONAtomicsReflect 内置对象。它们根本不是函数。

function objects (i.e. constructor functions)?

没有。考虑一下 parseInt、JSON.stringify 或 Array.prototype.slice 函数(以及更多全局、静态和原型(prototype)方法)。他们根本不是构造函数。

Do all (and only) function objects implement .prototype?

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

Are the right terms general object vs function object?

不,“一般对象”不是一个官方术语。我将它们命名为不可调用对象和 callable objects如果我必须这样做(规范中使用了后一个术语)。

关于JavaScript:所有标准内置对象实际上都是构造函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49431846/

相关文章:

javascript - jQuery .filter 使用 .css(display) 但不使用 .css(background-color)

javascript - Draft.js 自定义内容 block 不显示

javascript - 从固定日期查找下周五

javascript - 尝试将对象放入我的数组时,此过滤函数不会删除旧对象

javascript - [b][b = a,0] 如何在 a 和 b 之间交换?

javascript - 将服务注入(inject)选项卡 ionic 2

javascript - ReferenceError:找不到变量:$

php - 提交按钮在 IE/Safari 中不起作用,在 Chrome 中有效,但表单信息未通过

javascript - 是否有任何 CSS 规则在设置为空字符串时覆盖低特异性规则

javascript - 谷歌地图多标记不工作