// 事件派发类
class MessageCallback {
/**
*
* @param {String} route
* @param {*} msg
*/
static addListener(route, handler) {
this.handlers = this.handlers || [];
var handlers = this.handlers[route] || null;
if (!!handlers) {
var isHandlerExist = false;
for (var i in handlers) {
if (handlers.hasOwnProperty(i) && (handlers[i] === handler)) {
isHandlerExist = true;
break;
}
}
if (!isHandlerExist) {
handlers.push(handler);
}
}
else {
handlers = [];
handlers.push(handler);
this.handlers[route] = handlers;
}
}
/**
*
* @param {String} route
* @param {*} msg
*/
static emitMessage(route, msg) {
this.handlers = this.handlers || [];
var handlers = this.handlers[route] || [];
if (!!handlers) {
var handlersTemp = handlers.slice();
for (var i in handlersTemp) {
if (handlersTemp.hasOwnProperty(i) && !!handlersTemp[i].messageCallbackHandler && !handlersTemp[i].isDestroy) {
handlersTemp[i].messageCallbackHandler(route, msg);
}
}
}
}
/**
*
* @param {String} route
* @param {*} msg
*/
static removeListener(route, handler) {
this.handlers = this.handlers || [];
var handlers = this.handlers[route] || null;
if (!!handlers) {
for (var i = 0; i < handlers.length; ++i) {
if (handlers[i] === handler) {
handlers.splice(i, 1);
break;
}
}
}
};
}
// 创建全局对象
const Global = {}
Global.MessageCallback = MessageCallback
// 定义一个类
class Person {
// static
static type = 'person'
// private
height = 180;
constructor(name, age, sex) {
this.name = name
this.age = age
this.sex = sex || '男'
}
/**
*
* @param {String} route
* @param {*} msg
*/
messageCallbackHandler(route, message) {
console.log(route, message)
console.log(this.name, this.sex, this.height)
}
}
// 打印静态属性
console.log("类的静态属性 类型", Person.type)
// 创建对象实例
let person1 = new Person('lux', 24)
let person2 = new Person('lasa', 25, '女')
console.log("lux的实例对象", person1)
console.log("lasa的实例对象", person2)
Global.MessageCallback.addListener('MessagePush', person1)
Global.MessageCallback.addListener('MessagePush', person2)
console.log('全局对象上的属性 MessageCallback', Global.MessageCallback)
// 派发事件
setTimeout(() => { Global.MessageCallback.emitMessage('MessagePush', { msg: 100 }) }, 2000)
js自定义事件派发类
最新推荐文章于 2024-04-23 17:04:17 发布