Как добавить свои собственные методы в объект HTMLElement? - PullRequest
18 голосов
/ 12 января 2011

Например, для this.parentNode Я хотел бы просто написать this.p или вместо document.getElementById('someid') просто написать document.g('someid').Конечно, это простые примеры, я просто хочу знать, как правильно это сделать.

(я знаю, что могу использовать jQuery или Prototype, но я хотел бы узнать, как это действительно делается вJS)

Ответы [ 4 ]

29 голосов
/ 12 января 2011

Хотя вы можете прототип на HTMLElement во многих браузерах - Internet Explorer (6,7,8) является НЕ одним из них.AFAIK, IE9 поддерживает это (хотя я не проверял это).

Для браузеров, которые его обрабатывают, вы можете сделать:

HTMLElement.prototype.doHello = function(thing){
  alert('Hello World from ' + thing);
};
11 голосов
/ 12 января 2011

Я настоятельно рекомендую не пытаться сделать это по нескольким причинам:

  • Совместимость с браузерами .Хотя это возможно в нескольких браузерах, это невозможно в IE <= 8. </li>
  • Элементы DOM являются хост-объектами .Хост-объекты (т. Е. Объекты, предоставленные средой, которые не являются нативными объектами JavaScript) не обязаны играть по тем же правилам, что и нативные объекты JavaScript, и, кроме заданного поведения DOM, могут по существу делать то, что им нравится.Поэтому, даже если некоторые браузеры предоставляют прототип HTMLElement и позволяют расширять его, нет гарантии, что он будет работать так, как вы ожидаете.
  • Совместимость с другим кодом на вашей странице .Если какой-либо другой код на вашей странице (например, Prototype) портится с прототипом HTMLElement, вы рискуете назвать коллизии и трудно обнаруживаемые ошибки.

Вместо этого я бы предложил создать объекты-обертки вокругDOM-узлы, как это делают jQuery, YUI и другие библиотеки.

Kangax написал хорошую статью по этому , охватывающую все эти и многие другие вопросы.

3 голосов
/ 12 января 2011

Эта статья от perfectionkills.com , вероятно, даст вам некоторое представление о том, как это делается, и почему вы не должны делать это.

(Кстати, jQuery не расширяет элементы DOM. Вместо этого они используют оболочки DOM.)

2 голосов
/ 12 января 2011

Одним словом, не надо.Лучше не изменять объекты, которые вам не принадлежат .

Это особенно верно для HTMLElement, который нельзя изменить в некоторых браузерах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...