Не очень решение для нескольких элементов + страшно представить код для обработки второго события )
<html>
<head>
<meta charset = "utf-8" />
<style>
</style>
</head>
<body>
<div id = "foo">click me</div>
<div id = "bar">click me</div>
<script>
foo.storage = []
foo.onclick = function(){var self = this; foo.storage.forEach(function(f){f.call(self)})}
with(foo){
storage.push(function(){alert(this.innerHTML)})
storage.push(function(){alert(this.id)})
storage.push(function(){alert("fuck addEventListener")})
}
bar.storage = []
bar.onclick = function(){var self = this; foo.storage.forEach(function(f){f.call(self)})}
with(bar){
storage.push(function(){alert(this.innerHTML)})
storage.push(function(){alert(this.id)})
storage.push(function(){alert("fuck addEventListener")})
}
</script>
</body>
</html>
+ Вы начинали с того, что хвалили объявление обработчиков через свойство, однако один фиг от него ушли, ибо ваше решение его просто не поддерживает (писал выше).