Некоторые примеры. Они неопределенны, потому что они были работой для работодателей:
А "куча" для получения вершины N приводит к поиску стиля Google. (Запускающийся от кандидатов в индексе, пройдите их всех линейно, отсеяв их через минимальную "кучу" макс. размера N.) Это было для поискового изображением прототипа.
фильтры Цветка сокращают размер определенных данных о том, что миллионы пользователей видели вниз к сумме, это поместится в существующие серверы (все это должно было быть в RAM для скорости); для первоначального проекта были бы нужны много новых серверов только для той базы данных.
А представление треугольной антенной решетки разделило на два размер плотной симметричной антенной решетки для механизма рекомендации (RAM снова по той же причине).
Пользователи должны были быть сгруппированы по данным определенных ассоциаций; находят объединение , сделал это легким, быстрым, и точным вместо медленного, hacky, и приблизительный.
приложение для выбора АЗС согласно времени диска для людей в окружении использовало кратчайший путь Dijkstra с приоритетными очередями. Другая работа GIS использовала в своих интересах деревья квадрантов и индексы Morton.
Знание, что находится там на земле структур данных, пригождается - "недели в лаборатории, может сохранить Вас часы в библиотеке". Случай фильтра цветка только стоил из-за масштаба: если бы проблема подошла при запуске вместо Yahoo, я использовал бы простую хеш-таблицу. Другие примеры я думаю, разумны где угодно (хотя в наше время Вы, менее вероятно, кодируете их сами).
Это не лучшая идея для этого.
Прежде всего, чтобы наследовать от элемента 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 в том, что механизм такого наследования реально нигде не указан ; это могло быть необычно,
Вы можете просто добавить новые функции к прототипам DOM, например
Element.prototype.myNameSpaceSomeFunction = function(...){...}
Тогда myNameSpaceSomeFunction
будет существовать во всех элементах.
Я нашел способ, который работает ... по крайней мере, он позволяет мне получить доступ к расширенным свойствам объекта через элемент DOM и наоборот. Но это вряд ли элегантно.
var DOMelement = document.getElementById('myID'); // or $('#myID')[0]; in jQuery
DOMelement.extended = new extensionClass(this);
function extensionClass(element) {
this.element = element;
...
}