[extend] add another way of doing it, add abstract-event.js