О сейчас в голову пришло, с таким фиксом теоретически возникнет проблема с 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