Цитата:
|
Octane,
Твой вариант не будет работать если я сделаю так:
var o = Object.create({}, {});
o[0] = null;
o.hasOwnProperty(0); // false
|
Цитата:
|
melky,
Зачем? Просто для ИЕ нужно проинициализировать объект |
Цитата:
defineProperties только enumerable свойства берет из объекта с дескрипторами devote, твой вариант не работает, если сделать так:
var desc = Object.create({}, {"0": {}});
var obj = Object.create({}, desc);
obj[1] = 1;
console.log(obj.hasOwnProperty(1));
а если вместо getOwnPropertyNames будем использовать keys, можем случайно удалить non-enumerable свойство. Вряд ли конечно кто-то так будет делать, но хочется 100% вариант)----------- наверное лучше getOwnPropertyDescriptor использользовать |
//IE9-11 Object.create bug fix
//http://webreflection.blogspot.ru/2014/04/all-ie-objects-are-broken.html
(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 object = create(prototype, properties);
if (!Object.hasOwnProperty.call(object, 0)) {
//numeric key fixes a bug,
//it can be removed after,
//unlike alphabetic key
Object.defineProperty(object, 0, {
configurable: true
});
delete object[0];
}
return object;
};
};
|
Octane,
Да отличное решение. Мои тесты все прошел. |
Цитата:
new function () {
:) А еще есть вопрос: это alert(Object.hasOwnProperty) в каком стандарте написано? |
Цитата:
Object.prototype.hasOwnProperty Да и это тоже смущает: var object = create(prototype, properties);Как то все же лучше делать/видеть так: var object = create.call(this, prototype, properties);Потому как не сделав этого, мы лишаем прога передать иной контекст. Хотя конечно в данном случае он мало чем поможет. |
Цитата:
void function () {
return {
// ...
};
}();
Считаешь, что эта лучшей? ;) |
| Часовой пояс GMT +3, время: 14:48. |