2014-09-23 18 views
0

我在我的個人圖書館的幾個定義,這個人是在Safari中產生錯誤:Safari瀏覽器的JavaScript錯誤試圖定義「刪除」元素的方法

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

錯誤:類型錯誤:試圖改變不可配置枚舉屬性屬性。

我不明白這句話的意思,在FireFox中這個錯誤不會發生。

回答

0

的消息稱:

1)Element.prototype早已財產remove

2)該configurable-此屬性的屬性設置爲false。這意味着:remove屬性不能以任何方式更改。

,以評估嘗試:

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

有些瀏覽器對Element.prototype沒有remove,那麼你的代碼工作。 某些瀏覽器有,而configurable設置爲true,那麼它也可以工作,並覆蓋內置屬性。

順便說一句:屬性enumerableconfigurablewritable默認爲false,你只能申報他們,如果要他們是true

第二個旁白:在內置原型中混淆並不是一個好主意。

最後一個Aside:我的Safari(5.1.7)沒有Element.prototype.remove了,你的代碼工作。

+0

感謝您的完整答案,我今天回到了這個代碼,非常擔心這個嚴重錯誤。閱讀後,我在MDN找到了一個實驗性的方法ChildNode.remove,可能Safari 6已經在前面了,但是卻是Element類,所以我必須選擇另一個名字。至於默認的屬性,這段代碼也適用於我學習JavaScript,所以我將其作爲實時參考。 – Gustavo 2014-09-26 17:03:29

相關問題