我最近一直在使用JavaScript,在花了几个月之后,我仍然对一些内部构件感到困惑。
具体来说,我试图围绕所谓的here。
我所知道的
function objects
)general objects
和function objects
之间的区别在于function objects
实现[[Call]]
属性(因此可以调用)function objects
实现.prototype
属性,该属性表示使用function object
作为构造函数创建的所有对象的原型问题
Standard Built-In Objects
实际上是function objects
(即构造函数)吗?function objects
实施.prototype
?general object
还是function object
?谢谢。
答案 0 :(得分:1)
new
与Symbol
一起使用,则某些内置函数会抛出异常。(<{li}>)
Object.create()
为了阐明2,所有对象都有一个原型链,其中零个或多个对象排列在(有效)列表中。基于构造函数.prototype
值自动设置新对象的原型链仅适用于函数,但这类似于重复,因为函数是唯一可以构造函数的东西。
答案 1 :(得分:1)
所有函数对象都实现
.prototype
属性,该属性表示使用函数对象创建的所有对象的原型作为构造函数
没有。只有构造函数才能这样做。有些函数没有构造函数(即它们有[[call]]但没有[[construct]]内部方法),当你尝试将它们与new
一起使用时会抛出一个错误(就像有些函数一样)有一个[[construct]]内部方法,但仍然抛出。)
从技术上讲,即使构造函数也不一定需要.prototype
。您可以实现可以构造但没有.prototype
属性的内置函数。但是,所有本机构造函数都有一个。
所有标准内置对象实际上都是对象吗?
没有。考虑Math
,JSON
,Atomics
或Reflect
内置对象。它们根本不起作用。
函数对象(即构造函数)?
没有。考虑parseInt
,JSON.stringify
或Array.prototype.slice
函数(以及更多全局变量,静态和原型方法)。他们根本不是建设者。
所有(且唯一的)函数对象是否实现
.prototype
?
没有。 .prototype
属性没有什么特别之处,只是在使用function
构造实例时,它通常用于new
。但是每个对象都可以拥有或不具有.prototype
属性。
正确的术语是普通对象还是功能对象?
不,&#34;一般对象&#34;不是官方用语。如果必须,我会将它们命名为不可调用的对象和callable objects。(后一项在规范中使用)。