Safari javascript错误,试图定义“;删除“;元素方法

Safari javascript error trying to define "remove" Element method

本文关键字:删除 元素 方法 定义 javascript 错误 Safari      更新时间:2023-09-26

我的个人库中有几个定义,其中一个在Safari:中生成错误

Object.defineProperty(Element.prototype, "remove", {
    enumerable: false,
    configurable: false,
    writable: false,
    value: function(){
        this.parentElement.removeChild(this);
    }
});

错误:TypeError:正在尝试更改不可配置属性的可枚举属性。

我不明白这个短语的确切含义,在FireFox中,这个错误不会发生。

消息显示:

1) Element.prototype已经具有属性remove

2) 此属性的configurable-属性设置为false。这意味着:属性remove无论如何都是不可变的。

评估该尝试:

Object.getOwnPropertyDescriptor(Element.prototype, 'remove');

有些浏览器在Element.prototype上没有remove,那么您的代码就可以工作了。有些浏览器有,并且configurable设置为true,那么它也可以工作,并且您覆盖内建属性。

作为旁白:属性enumerableconfigurablewritable默认为false,只有在希望它们为true时才必须声明它们。

第二个旁白:在内置原型中乱搞不是一个好主意。

最后一点:我的Safari(5.1.7)不再有Element.prototype.remove了,你的代码也能正常工作。