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