作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在书上找到了代码,但遇到了一些问题。
var elems = {};
Array.prototype.push.call(elems, document.getElementById("first"));
alert(elems[0].nodeType); /It would output 1
最佳答案
你的对象没有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/
我是一名优秀的程序员,十分优秀!