TypeError:property Array.prototype.splice.call(...)是不可配置的,无法删除

时间:2013-11-02 20:57:41

标签: javascript prototypejs

当我尝试在FF中加载页面时,我收到此错误:

TypeError: property Array.prototype.splice.call(...) is non-configurable and can't be deleted

这是原型

   HTMLElement.prototype.selectorAll = function (selectors, fun) {

        var sels = Array.prototype.splice.call(this.querySelectorAll(selectors), 0)
        if (!fun) { return sels; }; fun.call(sels);
    };

如何解决此错误?

1 个答案:

答案 0 :(得分:2)

使用slice而不是splice从原始集合中创建新的Array

var sels = Array.prototype.slice.call(this.querySelectorAll(selectors), 0)

错误是因为splice也在尝试修改原始集合:

var a = [ 1, 2, 3, 4 ];

a.slice(0);
console.log(a); // [ 1, 2, 3, 4 ]

a.splice(0);
console.log(a); // []

NodeList返回的querySelectorAll()有一个不可配置的属性,splice无法按预期更改。