10.04.2014, 19:03
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
Сообщение от Octane
|
я только начинал верить в IE
|
Ахаха
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
11.04.2014, 00:09
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от Octane
|
придется фиксить так
|
Не помню с какого осла, но майкрософт заявила, что не хочет отличатся от остальных браузеров по юзер-агенту. Так что теперь это одна из "фич" новых IE
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
11.04.2014, 00:31
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Короче тут обсуждали 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 будет возвращать лишнее пустое свойство, но лучше варианта пока не придумал.
Последний раз редактировалось Octane, 11.04.2014 в 01:00.
|
|
11.04.2014, 12:00
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
А не проще тогда уж поправить hasOwnProperty
//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 hasOwnProperty = Object.prototype.hasOwnProperty;
Object.prototype.hasOwnProperty = function(prop) {
// если числовое свойство ищем
return +prop == prop ?
Object.getOwnPropertyNames(this).indexOf(""+prop) != -1 :
hasOwnProperty.apply(this, arguments);
};
};
|
|
11.04.2014, 12:19
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Тогда и getOwnPropertyDescriptor, и propertyIsEnumerable фиксить придется, может еще что-нибудь
|
|
11.04.2014, 21:17
|
|
√₋̅₁̅
|
|
Регистрация: 18.06.2012
Сообщений: 385
|
|
Баг интерфейса в FF28, замечен в винде:
Встроенный редактор JS иногда перестает исполнять код. Это бывает неочевидно, например, когда код чисто логический и не подразумевает каких-либо визуальных эффектов. Поэтому сопровождайте его хотя бы console.log, если ниче не логирует - лечится открыванием нового окна редактора.
__________________
Гейзенберг, возможно, читал этот тред.
Последний раз редактировалось Дзен-трансгуманист, 11.04.2014 в 21:25.
|
|
11.04.2014, 23:32
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Дзен-трансгуманист, ты не сюда пости, а в баг-трекер мозиллы
|
|
12.04.2014, 00:05
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
Сообщение от kobezzza
|
Дзен-трансгуманист, ты не сюда пости, а в баг-трекер мозиллы
|
Дзен-трансгуманист, не слушай его. Тогда тема будет неактуальна
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
12.04.2014, 03:09
|
что-то знаю
|
|
Регистрация: 24.05.2009
Сообщений: 5,176
|
|
Сообщение от 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;
};
};
Последний раз редактировалось devote, 12.04.2014 в 04:19.
|
|
12.04.2014, 10:56
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
О это хорошо, теперь фикс ничем не помешает. Я думаю, можно не выполнять никаких проверок, кроме наличия properties:
//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 object;
if (properties) {
//Object.defineProperties fixes a bug
object = create(prototype, properties);
}
else {
//numeric key fixes a bug,
//it can be removed after,
//unlike alphabetic key
object = create(prototype, {
"0": {
configurable: true
}
});
delete object[0];
}
return object;
};
};
Последний раз редактировалось Octane, 12.04.2014 в 15:56.
|
|
|
|