转载 

JS实现发布订阅模式

分类:前端    19人阅读    Ajie  2024-09-14 17:31
 const testObj = {};
	// 创建暂存区
	testObj.keep = {};
	
	// 创建订阅函数
	testObj.listen = function (key, fn) {
	    // 如果目标key不存在,初始化为空数组
	    if (!this.keep[key]) {
	        this.keep[key] = [];
	    }
	    this.keep[key].push(fn);
	};
	
	// 创建发布函数
	testObj.triger = function () {
	    // 提取key
	    // 使用shift从arguments移除第一个参数并返回
	    // 注意: 由于arguments是一个类数组对象本身并不携带shift函数,所以需要通过call将arguments指定为shift的目标上下文
	    let key = Array.prototype.shift.call(arguments);
	    let fns = this.keep[key];
	    if (!fns || this.keep[key].length == 0) {
	        return false;
	    }
	    // 循环调用并且传递移除key后的所有参数
	    fns.forEach((item) => {
	        item.apply(this, arguments);
	    });
	};
	
	testObj.listen("test1", function (res) {
	    console.log(res); // 发布内容
	});
	
	testObj.triger("test1", "发布内容");
支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者

 工具推荐 更多»