Обоснование / последствия требований наследования классов WebIDL

В библиотеке JavaScript (узел и браузер), в которую я добавляю (IndexedDBShim), ради полного охвата тестов, я надеюсь, что мы сможем не только лучше пройти общие тесты W3C, относящиеся к IndexedDB, но также и на основе WebIDL тесты интерфейса, связанные с IndexedDB.

В рамках подготовки к этому, когда я запускаю тесты WebIDL W3C через Event а также CustomEvent взаимодействует с используемыми нами полифилами Event, одно из требований тестирования, которое становится очевидным после анализа interface CustomEvent : Event является то, что прототип CustomEvent должен быть установлен в Event, Обратите внимание, что я не имею в виду каких-либо требований, что прототип CustomEvent объекты должны наследоваться от Event (ала CustomEvent.prototype = new Event(); или же CustomEvent.prototype = Object.create(Event);), обратите внимание, но это прототип объекта, ответственного за класс (функция конструктора CustomEvent) установлен на Event а не по умолчанию, Function.prototype).

Конечно же, в консоли Chrome я вижу, что для встроенных интерфейсов, Object.getPrototypeOf(CustomEvent) === Event это действительно true, Насколько я могу судить, единственный (основанный на стандартах) способ, которым я могу добиться этого в полифилле, - это сделать следующее:

function ShimEvent () {}
function ShimCustomEvent () {}
Object.setPrototypeOf(ShimCustomEvent, ShimEvent);

... но я вижу предупреждения на MDN, что этот метод работает медленно во всех браузерах.

Я думаю, мне просто нужно будет выбрать, стоит ли снижение производительности более высокого соответствия стандартам.

Однако, в любом случае, мне все же хотелось бы иметь лучшее понимание, чтобы знать, к каким последствиям наследуют интерфейсы таким образом (и, возможно, это больше вопрос моего понимания JavaScript, а не WebIDL как такового),

Поскольку из-за такой простой связи между прототипами объекта функции методы наследующего интерфейса не наследуются базовым интерфейсом, это ожидание соединения прототипа между функциями класса для простого выражения иерархии наследования между интерфейсами ради тех, кто может захотеть проанализировать их в коде? Или есть какое-то другое практическое следствие этого конкретного требования соединения прототипа класса?

0 ответов

Другие вопросы по тегам