0

私の個人的なライブラリにはいくつかの定義がありますが、これは Safari でエラーを生成しています:

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

エラー: TypeError: 構成不可能なプロパティの列挙可能な属性を変更しようとしています。

このフレーズの正確な意味がわかりません。FireFox では、このエラーは発生しません。

4

1 に答える 1

0

メッセージには次のように書かれています。

1) Element.prototype には既にプロパティがありますremove

2)configurableこのプロパティの -attribute は に設定されfalseます。つまり、プロパティremoveは決して変更できません。

その試みを評価するには:

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

一部のブラウザにはremoveonがなくてもElement.prototype、コードは機能します。一部のブラウザには があり、にconfigurable設定されていますがtrue、それも機能し、組み込みプロパティを上書きします。

余談ですが、属性enumerableconfigurable、およびwritableデフォルトはfalseであり、それらを にしたい場合にのみ宣言する必要がありますtrue

2 つ目の余談: ビルドイン プロトタイプをいじるのはあまり良い考えではありません。

最後の余談: 私の Safari (5.1.7) には Element.prototype.remove がなく、コードは機能します。

于 2014-09-24T12:48:01.103 に答える