2014-09-23 5 views
0

У меня есть несколько определений в моей личной библиотеке, это один генерации ошибки в Safari:Safari Javascript ошибка при попытке определить «удалить» Element метод

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

Ошибка: Ошибка типа: Попытка изменить перечислимого атрибут unconfigurable имущество.

Я не понимаю, что именно означает эта фраза, в FireFox эта ошибка не возникает.

ответ

0

В сообщении говорится:

1) Element.prototype уже имеет свойство remove.

2) configurable -трибут этого свойства: false. Это означает: свойство remove не может быть изменено каким-либо образом.

Чтобы оценить эту попытку:

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

Некоторые браузеры не remove на Element.prototype, то ваш код работает. У некоторых браузеров есть и configurable установлен в true, то он тоже работает, и вы перезаписываете встроенную собственность.

как в стороне: атрибуты enumerable, configurable и writable дефолтов в false, вы должны только объявить их, если хотите их быть true.

Вторым Помимо этого, в прототипах нет ничего хорошего.

Последнее: Помимо этого, My Safari (5.1.7) не имеет Element.prototype.remove и ваш код работает.

+0

Спасибо за полный ответ, я вернулся к этому коде сегодня, очень беспокоюсь об этой критической ошибке. После прочтения я нашел экспериментальный метод ChildNode.remove на MDN, возможно, Safari 6 уже впереди, но через Element класс, поэтому я должен выбрать другое имя. Что касается свойств по умолчанию, этот код предназначен для того, чтобы я также изучил JavaScript, поэтому я даю ссылку на живую ссылку. – Gustavo