Учебное пособие по прототипированию JavaScript [закрыто]
-
20-09-2019 - |
Вопрос
У меня есть JS-скрипт с множеством функций, в целом это:
function id(i) {
if(document.getElementById)
return document.getElementById(i);
return;
}
Это просто экономит мне много байтов при каждом вводе document.getElementById().Моя проблема в том, что я часто добавляю и удаляю классы и другие атрибуты из элементов.Я хочу иметь возможность сделать это:
id('main').addClass("someClass");
Кто-нибудь знает какие-нибудь хорошие учебники по прототипированию Javascript, которые могут это объяснить?Спасибо.
Решение
техника, которую вы ищете, — это цепочка методов.по сути, функция «id» должна возвращать экземпляр объекта, в котором есть метод «addClass».и этот метод «вернёт это».
Вот учебник, который объясняет эту концепцию:
http://javascriptant.com/articles/32/chaining-your-javascript-methods
Я также очень рекомендую эту книгу, чтобы изучить больше техник, подобных этой (да, цепочка рассматривается):-)
http://jsdesignpatterns.com/
Другие советы
Я должен спросить:Вы рассматривали возможность просто использовать что-то вроде jQuery?Если вы это сделали, проблема просто становится:
$("#main").addClass("someClass");
и вы сделали.Если цель состоит в том, чтобы реализовать это самостоятельно (если да, то почему?), тогда вам просто нужно знать, что если элемент имеет 3 класса, фактический атрибут просто:
"one two three"
Другой аспект, конечно, — это написание метода расширения.
Вы не можете добиться этого для всех браузеров, в частности, невозможно расширить методы, доступные для элемента в IE6 или 7.
Честно говоря, вы сэкономите кучу времени, если просто включите JQuery в свою разработку.
Лучше всего использовать фреймворк, если можете, как говорит Клетус.
Однако AnthonyWJones не совсем прав: невозможно расширить методы, доступные в универсальном объекте Element, но вы может еще добавим его к отдельным элементам.
Ваша функция id может расширить возвращаемые элементы с помощью метода addClass:
function get(id){
el = document.getElementById(id);
el.addClass = function(cls){
// your addClass code here
// (remember IE uses className, others use class)
};
return el;
}
Вы даже можете добавить его в объект Element (который автоматически добавляет его ко всем элементам на странице) для браузеров, поддерживающих эту функцию, а затем добавить метод только в свою функцию id для IE — это сэкономит память и ускорит работу приложения. немного, особенно когда вы начинаете добавлять много методов Element.
Именно такое поведение MooTools решает эту проблему — стоит повторить, что лучше использовать фреймворк там, где это возможно!