/**
* 动态事件绑定方法
* 为构造函数添加动态事件绑定和执行方法
* @export
* @class Events
* @example
* // 使用
* class _Event extends Events { ... }
*/
export default class Events {
constructor() {
/**
* 绑定方法缓存对象
* @memberof Events
*/
this._$event = {
};
}
/**
* 对象绑定方法
*
* @param {String} str 绑定名称
* @param {Function} event 需要绑定方法
* @example
* _Event.on('string',function(str,arg1,arg2){ ... });
* @memberof Events
*/
on(str, event, scope) {
if (!this._$event.hasOwnProperty(str)) {
this._$event[str] = [];
}
this._$event[str].push({
event, scope });
}
/**
* 取消事件绑定方法
*
* @param {String} str 绑定名称
* @param {Function=} event 需要取消绑定的方法
* @example
* var fun = function(arg1,arg2){ ... };
* // 单独取消
* _Event.off('string',fun);
* // 全部取消
* _Event.off('string');
* @memberof Events
*/
off(str, event) {
if (str) {
if (event) {
let events = this._$event.hasOwnProperty(str) ? this._$event[str] : [];
for (let i = 0; i < events.length; i++) {
const element = events[i];
if (element.event === event) {
events.splice(i, 1);
break;
}
}
} else {
delete this._$event[str];
}
}
}
/**
* 绑定事件运行方法
*
* @param {String} str 绑定的事件名称
* @param {Object} that 绑定事件的作用域
* @param {*} [object] 任意需要传值的参数
* @example
* _Event.run(str, this, 'string', {}, [], null ...);
* @memberof Events
*/
run(str) {
let _arguments = [];
for (let i = 0; i < arguments.length; i++) {
const element = arguments[i];
if (i >= 1) {
_arguments.push(element);
}
}
let events = this._$event.hasOwnProperty(str) ? this._$event[str] : [];
events.forEach(element => {
element.event.apply(element.scope, _arguments);
});
}
}
动态事件绑定方法
猜你喜欢
转载自blog.csdn.net/qq_38946996/article/details/128082337
今日推荐
周排行