Как наследоваться классу элемента DOM

Некоторые примеры. Они неопределенны, потому что они были работой для работодателей:

  • А "куча" для получения вершины N приводит к поиску стиля Google. (Запускающийся от кандидатов в индексе, пройдите их всех линейно, отсеяв их через минимальную "кучу" макс. размера N.) Это было для поискового изображением прототипа.

  • фильтры Цветка сокращают размер определенных данных о том, что миллионы пользователей видели вниз к сумме, это поместится в существующие серверы (все это должно было быть в RAM для скорости); для первоначального проекта были бы нужны много новых серверов только для той базы данных.

  • А представление треугольной антенной решетки разделило на два размер плотной симметричной антенной решетки для механизма рекомендации (RAM снова по той же причине).

  • Пользователи должны были быть сгруппированы по данным определенных ассоциаций; находят объединение , сделал это легким, быстрым, и точным вместо медленного, hacky, и приблизительный.

  • приложение для выбора АЗС согласно времени диска для людей в окружении использовало кратчайший путь Dijkstra с приоритетными очередями. Другая работа GIS использовала в своих интересах деревья квадрантов и индексы Morton.

Знание, что находится там на земле структур данных, пригождается - "недели в лаборатории, может сохранить Вас часы в библиотеке". Случай фильтра цветка только стоил из-за масштаба: если бы проблема подошла при запуске вместо Yahoo, я использовал бы простую хеш-таблицу. Другие примеры я думаю, разумны где угодно (хотя в наше время Вы, менее вероятно, кодируете их сами).

7
задан kangax 2 March 2014 в 15:20
поделиться

3 ответа

Это не лучшая идея для этого.

Прежде всего, чтобы наследовать от элемента DOM, вам необходимо иметь доступ к прототипу этого элемента. Проблема в том, что не все браузеры предоставляют доступ к прототипам элементов DOM . Новые клиенты на базе Gecko и WebKit, например, предоставляют некоторые из этих прототипов как глобальные объекты - HTMLDivElement, HTMLElement, Element, Node и т. Д.

Например, простой элемент DIV обычно имеет цепочку прототипов, подобную

HTMLDivElement.prototype -> HTMLElement.prototype -> Element.prototype 
  -> Node.prototype -> Object.prototype -> null

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

Когда браузер не предоставляет эти прототипы, вам в значительной степени не повезло . Вы можете попробовать получить их, следуя свойству constructor самого элемента DOM -

document.createElement('div').constructor;

- но тогда нет гарантии, что элемент имеет свойство constructor (например, IE6 не имеет) и даже если это означает, что это свойство ссылается на «правильный» объект. Если, в конце концов, конструктор ссылается на правильный объект, все еще нет гарантии, что этот объект может быть расширен вообще. На самом деле хост-объектам разрешено реализовывать совершенно странное поведение, и им даже не нужно следовать правилам, которым следуют собственные JS-объекты (вы можете найти десятки таких примеров в реальной жизни).

Вторая причина, по которой вы хотите избежать наследования от Прототипы элементов DOM в том, что механизм такого наследования реально нигде не указан ; это могло быть необычно,

20
ответ дан 6 December 2019 в 07:27
поделиться

Вы можете просто добавить новые функции к прототипам DOM, например

Element.prototype.myNameSpaceSomeFunction = function(...){...}

Тогда myNameSpaceSomeFunction будет существовать во всех элементах.

1
ответ дан 6 December 2019 в 07:27
поделиться

Я нашел способ, который работает ... по крайней мере, он позволяет мне получить доступ к расширенным свойствам объекта через элемент DOM и наоборот. Но это вряд ли элегантно.

var DOMelement = document.getElementById('myID'); // or  $('#myID')[0]; in jQuery
DOMelement.extended = new extensionClass(this);

function extensionClass(element) {
    this.element = element;
    ...
}
0
ответ дан 6 December 2019 в 07:27
поделиться
Другие вопросы по тегам:

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