这是参考的地址: https://www.jb51.net/article/137419.htm;(看了很多版本觉得这个很不错)
在笔试和一些面试经验交流的帖子中进程出现订阅者模式,想着自己还不是很清楚,所以得解决,但是我们的目的应该不仅仅是对付笔试和面试,应该了解这个模式的思想:松散耦合代码形式!更多的大家看别的描述吧,会比我更清楚,这里也不累述,只是加入自己更加通俗的理解:我们的_events是一个可以看成是一个库里面包括了所有的订阅者的信息,信息就是订阅者的type,我把type当做是订阅者的姓名,然后对象的type(订阅者)有不同的fn(订阅的内容),这样也许会好理解一些
我在原作者上进行了语法的简单精简,剔除了执行作用域的部分(context),并且在作者可能没有提到的点做了相对而言比较详细的注释,另外本文需要有一定的ES6语法的底子,比如说:箭头函数,展开符(...),ES6中class类,Object.create(),findIndex(),参数传递默认值等等;
另外"_"的符号是约定俗成的表示,代表该变量是给内部使用的,但是更多时候见仁见智吧...
//自定义便捷的数据类型判断函数
const isType=obj=>Object.prototype.toString.call(obj).slice(8,-1).toLowerCase();
const isArray=obj=>Array.isArray(obj)||isType(obj)==='array';
const isNullOrUndefined=obj=>obj===null||obj===undefined;
//内部函数钩子,不对外开放;
//主要用于处理初始值,初始化对象EventEmitter的_events内容