js事件分发就是实现类似于vue eventBus的功能

function Eventdispatcher() {}
 
	Object.assign( Eventdispatcher.prototype, {
 
		addEventListener: function ( type, listener ) {
 
			if ( this._listeners === undefined ) this._listeners = {};
 
			var listeners = this._listeners;
 
			if ( listeners[ type ] === undefined ) {
 
				listeners[ type ] = [];
			}
 
			if ( listeners[ type ].indexOf( listener ) === - 1 ) {
 
				listeners[ type ].push( listener );
 
			}
 
		},
 
		hasEventListener: function ( type, listener ) {
 
			if ( this._listeners === undefined ) return false;
 
			var listeners = this._listeners;
 
			return listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;
 
		},
 
		removeEventListener: function ( type, listener ) {
 
			if ( this._listeners === undefined ) return;
 
			var listeners = this._listeners;
			var listenerArray = listeners[ type ];
 
			if ( listenerArray !== undefined ) {
 
				var index = listenerArray.indexOf( listener );
 
				if ( index !== - 1 ) {
 
					listenerArray.splice( index, 1 );
 
				}
 
			}
 
		},
 
		dispatchEvent: function ( event ) {
 
			if ( this._listeners === undefined ) return;
 
			var listeners = this._listeners;
			var listenerArray = listeners[ event.type ];
 
			if ( listenerArray !== undefined ) {
 
				event.target = this;
 
				var array = listenerArray.slice( 0 );
 
				for ( var i = 0, l = array.length; i < l; i ++ ) {
 
					array[ i ].call( this, event );
				}
			}
		}
	} );
 
	var pac=new Eventdispatcher();
	var mm=null;
	pac.addEventListener("xuhaitao",function(){
		mm=this;
		console.log(this,"wo  zi ji");
    })
 
	var nn=null;
	pac.addEventListener("xuhaitao",function(){
		nn=this;
		console.log(this,"wo di di");
	})
    pac.dispatchEvent({type:"xuhaitao"})
	console.log(mm===nn);

两个this都指向pac实例对象

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...