Сообщение от Octane
|
Тогда и getOwnPropertyDescriptor, и propertyIsEnumerable фиксить придется, может еще что-нибудь
|
Ок, тогда не нужно никаких NOPов, все делается просто:
//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) {
var isExecNum = properties && Object.getOwnPropertyNames(properties).indexOf("0") != -1;
if (!isExecNum) {
properties = properties || {};
/**
* Нужно добавить именно числовое свойство, иначе не будет работать
* например такой вариант не работает:
* var o = Object.create({}, {"": {configurable: true}});
* delete o[""];
* o[0] = null;
* o.hasOwnProperty(0) // -> false
* но если вместо пустой строки поставить число, то все работает хорошо
*/
properties["0"] = {
configurable: true
};
}
var object = create.call(this, prototype, properties);
if (!isExecNum) {
delete object["0"];
delete properties["0"];
}
return object;
};
};