Работа над сломанной реализацией Object.defineProperty в IE8

Объективное Отсутствие Caml

  1. пространства имен facilicty.
  2. Многословный класс и объект nortation.
  3. Сложная система сборки.
  4. Неудобный для создания инфикса.
26
задан Phrogz 27 January 2011 в 17:39
поделиться

3 ответа

Я не думаю, что есть лучший способ, чем прямой тест с использованием try / catch. Это именно то, что сама команда IE рекомендует в этой недавней публикации о переходе на ES5 API .

Вы можете сократить тест до чего-то наподобие Object.defineProperty({}, 'x', {}) (вместо использования Array.prototype), но это небольшая ошибка; В вашем примере проверяется точная функциональность (и поэтому вероятность ложных срабатываний меньше).

22
ответ дан 28 November 2019 в 07:51
поделиться

У меня была такая же проблема (т. Е. Object.defineProperty в IE 8 был только DOM, а не полной реализацией, как другие браузеры), но это было для полизаполнения.

Во всяком случае, я прекратил использовать проверку «функциональности», чтобы посмотреть, использовал ли я IE, он не идеален, но он работает на всех тестах, которые я мог сделать:

if (Object.defineProperty && !document.all && document.addEventListener) {
    Object.defineProperty(Array.prototype,'sayHi',{value:sayHi});
} else {
    Array.prototype.sayHi = sayHi;
}

как IE < = 8 не имеет document.addEventListener, а document.all является проприетарным расширением Microsoft к стандарту W3C. Эти две проверки эквивалентны проверке, является ли IE версией 8 или ниже.

0
ответ дан 28 November 2019 в 07:51
поделиться

Я использую Browserify с пакетом множественного числа из npm, в котором используется Object.defineProperty, и я удалил это.

https://github.com/inexorabletash/polyfill/blob/master/ es5.js

7
ответ дан 28 November 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: