这是一个关于ECMA-262最新版本的问题。在https://tc39.es/ecma262/#sec-createintrinsics上面写着
必须有序地创建intrinsic及其属性,以避免对尚未创建的对象的任何依赖。
是否有一个特定的顺序定义,或者实现者必须自己弄清楚这个?
我问这个问题是因为这很好,而且很适合附录。但也许我不知怎么错过了。
谢谢你的阅读和热情的问候!
没有,没有具体的顺序。用户代码无法观察到它,所以它根本无关紧要。
实现者必须自己决定这一点。有很多可能的顺序。你甚至可以创建对象和它们的属性彼此分开,因为有循环引用(例如在.prototype
和.constructor
之间,或者在Function
和Object
之间)。
该部分包含以下文本:
每个字段的值都是一个新的对象值,完全递归地填充由子句19到28中每个对象的规范定义的属性值。
子句的顺序就是定义的顺序。
例如,首先定义全局对象,然后定义JS对象,定义函数,定义其他东西,如Errors和各种Error子类,等等。