在调用Array.prototype.slice时,Firefox错误'设置只有getter的属性'

时间:2011-02-23 06:32:38

标签: javascript arrays firefox

我需要将NodeList对象转换为数组 - 在本例中是<div>元素的列表,因为我需要使用map()filter()方法改进它。

不幸的是在Firefox中(我测试了3.6和4)我正在使用的方法引发了以下错误:

Error: setting a property that only has a getter

以下代码是相关行的精简版本。

trackList = [].splice.call(videoElement.querySelectorAll("div"),0);

这在Chrome和Safari中运行良好。它似乎与querySelectAll方法无关,因为无论如何获得NodeList,都会出现同样的问题(例如,使用document.getElementsByTagName("div")。)

问题似乎在于call()方法本身 - 给定预先存在的NodeList并引用Array.prototype.slice方法,以下内容仍会失败:

sliceMethod.call(myNodeList,0);

毋庸置疑,我很难过 - 任何帮助或建议都会受到高度赞赏。

更新

原来这是一个印刷错误 - slice 而不是 splice

1 个答案:

答案 0 :(得分:1)

我认为问题不在于call,而在于NodeList。 NodeLists是(我认为总是)live,这意味着如果添加一个新div,它会自动成为NodeList的一部分,或者如果从文档中删除它,它也会从NodeList中删除,等等。有意义的是从NodeList中取出任何东西,这是splice的作用。我想可能你的意思是使用slice代替。