Гггг))) Как бы с первого взгляда и одно и то же, но не совсем.
Если первый вариант юзать на практике - далеко не всегда ваш ".button" будет совпадать с тем, что находится в таргете. Например на кнопке иконка/рисунок/etc. Поэтому вам придется дописывать специализированный костылеподобный изворот типа:
if ($(e.target).closest('.button').length){
//....
e.stopPropagation();
}
что само по себе уже не совсем тоже самое, как предпогалолась в вопросе.
К тому же, не будет возможности использовать .trigger() для .button
Ну и не известно сколько еще потом по вылазит глюков, требующих, чтоб и их подперли чем-то...
В итоге получится явно не быстрее и не стабильней чем в либе. Там как ни как сидят, почесывая башни изо дня в день, думая как еще оптимизировать и стабилизировать работу методов. Версий то вон уже сколько вышло.
UPDПросто когда жму Event Listeners в chrome - там у каждого элемента оочень много listener'ов
Во втором варианте слушатель вешается не на кнопку, а на документ. Видимо у вас просто установлен чекбокс на "Ancestors".
Ну а если вам взбредет в голову все таки писать свою реализацию делегирования, то в лучшем случае, как мне кажется, вы придёте к оригинальной реализации метода jq.