По сути, вы можете добавить любое свойство к (почти) любому виду объекта JS.И если вы добавите функцию к объекту, то this
этой функции будет объектом.
Другими словами
var x = document.getElementById('MyTextBox'); // a DOM object
x.setTheText = function(text) {
this.value = text;
};
x.setTheText('blah'); // bingo
Если вы хотите расширить целый класс объектов, выЭто можно сделать и с помощью прототипа
HTMLTextAreaElement.prototype.setTheText = function(text) {
this.value = text;
};
someRandomTextArea.setTheText("blah"); // bingo. Again.
Однако это не рекомендуется, поскольку вы возитесь с объектами, находящимися вне вашего контроля (т. е. хрупки, как другие скрипты и обновления браузера, и тому подобное).мешать).Кроме того, вы можете сломать какой-то другой фрагмент кода, выполнив это.
Лучшим решением (во многих отношениях) является решение jQuery для обертывания неизмененного элемента DOM в другом объекте и скорее вызовом методов для объекта-оберткичем непосредственно элемент (Лично мне больше нравится «симпатичный» код, который может быть получен из простого расширения нативных объектов JS, но, увы, это небезопасно, поэтому я пытаюсь выйти из этого.)
ps КлассыПодчеркнуты в javascript;методы CamelCase.Я отредактировал код соответственно.Это не что-то, что навязывается ничем, а стилем стиля.
Редактировать: Для сравнения вы можете посмотреть библиотеку prototype.js , которая творит чудеса, расширяя DOM,Опять же, на мой взгляд, это делает некоторый очень симпатичный код по сравнению с постоянными вызовами jQuery $(...).xyz(...)
, но это все еще немного опасный путь, чтобы пройти