/**
* @class Base
*/
var Base = function Base() {};
Base.prototype = {
/**
* @private
*/
_events: null,
/**
* @method trigger
* @param {String} eventName
* @param {*|Array} [arg]
* @returns @this
*/
trigger: function (eventName, arg) {
var $Event = function (type) {
this.type = type;
};
if (!this._events || !this._events[eventName]) {
return this;
}
if (!(arg instanceof Array)) {
arg = [arg];
}
var iteration = function () {
var arrEvents = this._events[eventName].slice();
arrEvents.forEach(function (handler) {
handler.apply(new $Event(eventName), arg);
});
}.bind(this);
iteration();
return this;
},
/**
* @method bind
* @param {String|Object} eventName
* @param {function|Array} [handler]
* @returns @this
*/
bind: function (eventName, handler) {
if (eventName == undefined) {
console.log("Неверные параметры!");
return this;
}
if (typeof eventName == "object") {
this.iterationObj(eventName, function (handler, eventName) {
this.bind(eventName, handler);
}.bind(this));
return this;
}
if (handler == undefined) {
console.log("Неверные параметры!");
return this;
}
if (!this._events) {
this._events = {};
}
if (!this._events[eventName]) {
this._events[eventName] = [];
}
if (!(handler instanceof Array)) {
this._events[eventName].push(handler);
} else {
this._events[eventName] = this._events[eventName].concat(handler);
}
return this;
},
/**
* @method unbind
* @param {String|Object} [eventName]
* @param {function} [handler]
* @returns @this
*/
unbind: function (eventName, handler) {
if (eventName == undefined) {
this._events = {};
return this;
} else if (eventName instanceof Object) {
for (var key in eventName)
if (eventName.hasOwnProperty(key))
this.unbind(key, key[eventName]);
return this;
}
if (handler == undefined) {
if (this._events && eventName in this._events) {
this._events[eventName] = [];
return this;
}
return this;
}
for (var i = 0; i < this._events[eventName].length; i++) {
if (this._events[eventName][i] == handler) {
this._events[eventName].splice(i, 1);
break;
}
}
return this;
}
};
var Obj1 = new Base();
Obj1.bind("some event", function () {
alert("some event!");
});
Obj1.bind("some event", function () {
alert("some event!2");
});
Obj1.trigger("some event", []);
Раньше я использовал этот объект как базовый класс. Я наследовался от него и все мои объекты могли общаться событиями. Сейчас я использую события взятые из backbone (хотя в целом там тоже самое)