Короче тут обсуждали
https://twitter.com/DmitryKorobkin/s...81153034596354
Если фиксить через new NOP, то возникает проблема:
Object.create(null) instanceof Object → true
, а так быть не должно, поэтому последний вариант:
//IE9-11 Object.create bug fix
(function () {
var object = Object.create({});
object[0] = null;
return object.hasOwnProperty(0); //→ false in IE9-11
}()) || new function () {
var create = Object.create;
Object.create = function (prototype, properties) {
//Object.defineProperties fixes a bug
if (properties) {
return create(prototype, properties);
}
//If Object.create works via new NOP, then
//Object.create(null) instanceof Object → true,
//but it's wrong.
//https://twitter.com/WebReflection/status/454342010288078848
if (prototype === null) {
return create(null, {
"": {
configurable: true,
writable: true
}
});
}
function NOP() {}
NOP.prototype = prototype;
return new NOP;
};
};
да, теперь для
Object.create(null)
, метод
Object.getOwnPropertyNames
будет возвращать лишнее пустое свойство, но лучше варианта пока не придумал.