Показать сообщение отдельно
  #43 (permalink)  
Старый 11.04.2014, 00:31
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 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.
Ответить с цитированием