Leave a Comment
Обработчик кастомных событий на чистом js
Часто попадается на собеседованиях, сам спрашиваю;)
Давно видел эту ссылку, а тут почему-то найти не могу.
Вот решение от Nicholas C. Zakas:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
//Copyright (c) 2010 Nicholas C. Zakas. All rights reserved. //MIT License function EventTarget(){ this._listeners = {}; } EventTarget.prototype = { constructor: EventTarget, addListener: function(type, listener){ if (typeof this._listeners[type] == "undefined"){ this._listeners[type] = []; } this._listeners[type].push(listener); }, fire: function(event){ if (typeof event == "string"){ event = { type: event }; } if (!event.target){ event.target = this; } if (!event.type){ //falsy throw new Error("Event object missing 'type' property."); } if (this._listeners[event.type] instanceof Array){ var listeners = this._listeners[event.type]; for (var i=0, len=listeners.length; i < len; i++){ listeners[i].call(this, event); } } }, removeListener: function(type, listener){ if (this._listeners[type] instanceof Array){ var listeners = this._listeners[type]; for (var i=0, len=listeners.length; i < len; i++){ if (listeners[i] === listener){ listeners.splice(i, 1); break; } } } } }; |
http://www.nczonline.net/blog/2010/03/09/custom-events-in-javascript/
Similar Posts
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.