【问题标题】:What native constructors are not accessible through the global object?哪些本地构造函数不能通过全局对象访问?
【发布时间】:2012-10-25 03:58:24
【问题描述】:

this question 中,建议为了让所有本机对象使用全局对象。然而,答案是不完整的,因为还有其他本地对象无法通过全局对象访问。

我知道至少有一个——Arguments,它没有来自全局对象的引用。还有哪些构造函数不能通过全局对象访问?

这个问题不仅限于浏览器,也可能包括 Node。

【问题讨论】:

  • 你知道的那个是什么?
  • 我在我的问题中说明了这一点——Arguments(即 Arguments 构造函数)。让我把它格式化好一点,这样更明显
  • 我从未听说过Arguments 构造函数。 arguments 不是 Object 的实例吗?
  • @Eli 虽然您的代码确实输出了您所说的内容,但这并不意味着存在Arguments 构造函数。见section 10.6 of the language specification。所以我不知道你的问题的有效答案是什么。也许“原生对象都可以通过全局对象访问,并且可以使用Object.getOwnPropertyNames 进行检查”。

标签: javascript native-code


【解决方案1】:

当您列出全局对象上引用的所有对象时,这将包括 native objects(核心语言对象)和 host objects(由宿主环境提供;在浏览器中,所有 DOM 内容等等)。这就是我们可以在代码中使用的全部内容。

该列表中没有Arguments 构造函数。可能有,但没有:

arguments 对象是通过调用抽象操作 CreateArgumentsObject 创建的 ECMAScript 5.1, Section 10.6

粗略地说,该操作创建了一个常规的Object(标准构造函数,标准原型),用一些额外的属性(如length)对其进行了扩展,并将其[[Class]] 内部属性设置为"Arguments"。这就是为什么arguments.toString()[object Arguments]

【讨论】:

    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 2015-01-25
    • 2013-05-23
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多