Цитата:
|
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, время: 15:16. |