У меня будет большое количество объектов в javascript, визуальное представление которых на странице будет выглядеть как div (div будут появляться и скрываться в зависимости от положения мыши).
Чтобы взаимодействовать с объектами, я пытаюсь выбрать между добавлением <button>
элементов (или других элементов с атрибутом onclick) или <div>
s с прослушивателями щелчков.
Преимущество использования <div>
s с прослушивателями щелчков состоит в том, что функция обратного вызова (то есть функция обработчика щелчков) будет иметь замыкание на объекте, соответствующем его визуальному представлению (родительский div). Таким образом, когда я нажимаю, он знает, с каким объектом я взаимодействую.
Преимущество использования элементов <button>
(или других элементов DOM с атрибутом onclick
) состоит в том, что на странице будет зарегистрировано меньше слушателей. Но недостаток использования <button>
элементов состоит в том, что его функция-обработчик клика будет не иметь замыкание на объекте, и, таким образом, единственный способ обратиться к правильному объекту - через некоторый индекс, в котором каждый объект обладает уникальное имя. Пример только с 2 объектами (у меня будет еще много на моей странице):
var arrayOfObjects = [];
var anObj = {
// some info about object
this.indxInArray = arrayOfObjects.push(this);
this.clickFunction = function() {
// insert logic for click listener...
};
var that = this;
this.theButton = $("<button type='button' onclick='arrayOfObjects["that.indxInArray"].clickFunction");
$('anObj').append(that.theButton);
}
var anotherObj = {
// some info about object
this.indxInArray = arrayOfObjects.push(this);
this.clickFunction = function() {
// insert logic for click listener...
};
var that = this;
this.theButton = $("<button type='button' onclick='arrayOfObjects["that.indxInArray"].clickFunction");
$('anotherObj').append(that.theButton);
}
// ... HTML stuff:
<div id='anObj'>
</div>
<div id='anotherObj'>
</div>
Пуговичный способ выглядит грязным и утомительным способом обращения к объектам javascript в DOM, но он сохраняет целую кучу слушателей щелчков.
Мой вопрос: много ли зарегистрированных слушателей событий значительно замедляют производительность? Исчезнет ли это влияние на производительность, пока родительский элемент, содержащий зарегистрированный элемент, будет скрыт?