gpt4 book ai didi

javascript - 关于原型(prototype)和数组的一些问题

转载 作者:行者123 更新时间:2023-11-28 20:03:53 24 4
gpt4 key购买 nike

我在书上找到了代码,但遇到了一些问题。

var elems = {};
Array.prototype.push.call(elems, document.getElementById("first"));
alert(elems[0].nodeType); /It would output 1
  1. 我知道“调用”是将push方法绑定(bind)到“elems”对象。但“elems”是空的
    对象,为什么空对象有“push”方法?
  2. 我试图丢弃从 Array.prototype.push 到 Array.push 的“原型(prototype)”。但它没有工作。为什么?据我从书中得知,该方法是通过原型(prototype)链找到的。谢谢。

最佳答案

你的对象没有push方法。通过使用 .call(),您可以指示 .push() 对对象进行操作,就像它是一个数组一样,这确实有效。

Array.push 不起作用(除了在 Firefox 中),因为 .push 是所有 Array 对象继承的方法。因此,它存在于 Array 构造函数的 .prototype 中。

<小时/>

如果你这样做:

[].push.call(elems, ...)

它会起作用,因为您正在创建一个新数组,并通过继承获取来自Array.prototype.push()

<小时/>

在 Firefox 中,您只需执行以下操作:

Array.push(elems, document.getElementById("first"));

这是因为 Firefox 有所谓的“Array generics”,它接受要操作的对象作为第一个参数,以及要推送的项目作为第二个(或更多)。

关于javascript - 关于原型(prototype)和数组的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21176300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com