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

标签 javascript prototypejs

当我尝试在 FF 中加载我的页面时,出现此错误:

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

这是原型(prototype)

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

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

如何修复此错误?

最佳答案

使用 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); // []

还有 NodeListquerySelectorAll() 返回有一个不可配置的属性 splice不能像预期的那样改变。

关于javascript - TypeError : property Array. prototype.splice.call(...) 不可配置,无法删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19746781/

相关文章:

javascript - 更改 HTML 按钮的 onclick 事件委托(delegate)?

javascript - 如何通过 REST API 提交 Jenkins 作业?

javascript - 使用D3制作双水平折线图

javascript - Script.aculo.us Drag 'n' Drop - 恢复 onEnd 条件

javascript - Effect.toggle 和 AJAX 调用

javascript - 解构和重命名属性

javascript - 缩小版本的 jQuery 或 Prototype - JS 框架选择

javascript - Web API : error integer codes or error strings?中返回错误

javascript - 如何强制我的 ChartJS Canvas 图例保留在单个列中?

javascript - 调用函数不更新数据