Показать сообщение отдельно
  #101 (permalink)  
Старый 03.09.2011, 16:42
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

О сейчас в голову пришло, с таким фиксом теоретически возникнет проблема с defineProperty:
(function () {

	function fn() {}

	var obj = {};
	Object.defineProperty(obj, "toString", {value: fn, enumerable: false});

	console.log(Object.keys(obj));//[]
	console.log(obj.hasOwnProperty("toString"));//true
	console.log(obj.propertyIsEnumerable("toString"));//false

}());

кто-то специально выставит enumerable:false, а мы в Object.keys проверим obj.hasOwnProperty("toString") и все равно вернем ключ toString. НО браузеров, одновременно поддерживающих Object.defindeProperty и не поддерживающих Object.keys, и имеющих баг, наверное нет, ну кроме IE8, но в нем Object.defindeProperty работает только для DOM-объектов и при попытке установить для этих свойств enumerable:false возникает ошибка: «Для данного объекта атрибут enumerable дескриптора свойства не может иметь значение false»
Object.defineProperty(Element.prototype, "toString", {
	value: function fn() {},
	enumerable: false
});


Object.keys: 1|2

Последний раз редактировалось Octane, 03.09.2011 в 16:50.
Ответить с цитированием