【问题标题】:Why doesn't htmlCollection inherit from array为什么 htmlCollection 不从数组继承
【发布时间】:2016-09-07 15:55:57
【问题描述】:

为什么 htmlCollection 不继承自数组?我知道 htmlCollection 是一个实时集合,而不是一个快照数组,但它不能仍然从数组继承吗?

converting an htmlCollection to an array 有明显的方式,但它正在转换它。默认情况下不是这样的。

更新

这是关于下面的评论:

Is HTMLCollection An Array? – @winhowes 的可能重复

正如 cmets 中所解释的,这两个问题大相径庭。 The other question 解释了两者之间的区别,我也在上面的问题中写道。我的问题是,为什么 JavaScript 的默认 htmlCollection 不继承自数组。

这两个问题的区别在于,the other question 是“什么是差异”,我的问题是“为什么会有差异”。

【问题讨论】:

  • @winhowes 解释了两者之间的区别,(我也在问题中写过)但我的问题是,为什么 JavaScript 的默认 htmlCollection 不从数组继承。这两个问题的区别在于他的问题是'whats diff',我的问题是'为什么会有差异'
  • DOM 规范完全独立于 JavaScript。如果浏览器添加 JavaScript 方法,它就会偏离 DOM 规范。
  • “我知道 htmlCollection 是一个实时集合 [...] 但它不能仍然从数组继承吗?”不,我不认为它可以。数组原型是为常规数组设计的,而不是为每次访问它们时自动更新(即重新运行查询)的集合。 (注意:我不是 JS 内部的专家;这只是我的最佳猜测。)

标签: javascript arrays inheritance htmlcollection


【解决方案1】:

问:“为什么 htmlCollection 不继承自数组?”


答: 那是因为 htmlCollection 与 JavaScript 数组完全无关。 第一个是由 DOM 创建的 DOM 对象,后者是由 JS Array 构造函数创建的。与 JS Array 构造函数无关,DOM htmlCollection 自然不会从数组继承任何东西。

htmlCollection length 属性是它们之间唯一的共同属性,然而,与 Aray 长度相反,DOM htmlCollection 属性是只读

你最感兴趣的部分可能是 htmlCollection 可以利用 JS 数组公开的大多数方法。并且可以直接赋值给HTMLCollection原型,其constructor,如你所见:指向JS Object的构造函数。

附言: htmlCollection 对象与 arguments 对象比任何其他对象都更相似,因为它们都由 Object 构造函数调用,而不是 Array。

【讨论】:

    猜你喜欢
    • 2014-06-09
    • 2014-01-31
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2020-02-28
    相关资源
    最近更新 更多