Я впрошлом треде пытался выяснить есть ли преимущества сабжа перед on-свойствами объектов. И, на данный момент, я склоняюсь к тому, что никаких преимуществ нет. А вот недостатки есть -- расширяемость. Я набросал вот такую вот реализацию
Код:
|
libEvents={
__proto__: null,
divClick1: function(){console.log(1)},
divClick2: function(){console.log(2)},
all: function(){
for(var i in libEvents){
if(i!=="all"){ libEvents[i]()}
}
}
}
div=document.createElement("div")
div.innerHTML="foo"
div.onclick=libEvents.all
document.body.appendChild(div)
libEvents.divClick3=function(){console.log(3)}
div2=document.createElement("div")
div2.innerHTML="bar"
div2.onclick=libEvents.all
document.body.appendChild(div2) |
и тут, если кому-то неочевидно, у нас огромный профит в расширяемости, ибо libEvents легко можно наследовать. Конечно, мы можем сделать во так
Код:
|
div=document.createElement("div")
div.innerHTML="foo"
div.addEventListener("click", libEvents.all)
document.body.appendChild(div)
libEvents.divClick3=function(){console.log(3)}
div2=document.createElement("div")
div2.innerHTML="bar"
div2.addEventListener("click", libEvents.all)
document.body.appendChild(div2) |
Но если мы допиливаем уже готовое дерьмо, придется лазить по всему коду, и искать все addEventlistener'ы и совать все в объект.
Если Вы приведете пример, где мы можем сделать это так же легко с addEventListener, я заберу свои слова обратно.
А пока: Considered harmful