diff --git a/.babelrc b/.babelrc index 7917da6..3a458b6 100644 --- a/.babelrc +++ b/.babelrc @@ -1,4 +1,4 @@ { - "presets": [ "@babel/env" ], + "presets": [ "@babel/preset-env" ], "plugins": [ "version" ] } diff --git a/README.md b/README.md index 497fb82..fcd173f 100644 --- a/README.md +++ b/README.md @@ -35,10 +35,10 @@ ee.off('click'); Simple and similar with `event-emitter`. - - **on**(eventName: string, callback: Function): listen an event. - - **once**(eventName: string, callback: Function): listen a event only once. - - **fire**(eventName: string, ...parameters: any[]): emit / trigger an event with parameters. - - **off**(eventName?: string, callback?: Function): unsubscribe an event. + - **on(eventName: string, callback: Function)**: listen an event. + - **once(eventName: string, callback: Function)**: listen a event only once. + - **fire(eventName: string, ...parameters: any[])**: emit / trigger an event with parameters. + - **off(eventName?: string, callback?: Function)**: unsubscribe an event. diff --git a/package.json b/package.json index 8a990f7..7e1e8cb 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,6 @@ "@babel/core": "^7.2.2", "@babel/preset-env": "^7.2.3", "@types/jest": "^23.3.10", - "babel-cli": "^6.26.0", "babel-plugin-version": "^0.2.3", "jest": "^23.6.0", "rimraf": "^2.6.2", diff --git a/src/index.ts b/src/index.ts index 2012339..447121b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,8 @@ /** * mini (~500 b) version for event-emitter. + * + * Created by hustcc on 2018/12/31 + * Contract: vip@hust.edu.cn */ export interface Listener { @@ -14,9 +17,9 @@ export interface EventsType { /** * const ee = new OnFire(); * - * ee.on('click', () => {}); + * ee.on('click', (...values) => {}); * - * ee.on('mouseover', () => {}); + * ee.on('mouseover', (...values) => {}); * * ee.emit('click', 1, 2, 3); * ee.fire('mouseover', {}); // same with emit @@ -48,7 +51,9 @@ export default class OnFire { fire(eventName: string, ...params: any[]) { const listeners = this.es[eventName] || []; - for (let i = 0; i < listeners.length; i ++) { + let l = listeners.length; + + for (let i = 0; i < l; i ++) { const { cb, once } = listeners[i]; cb.apply(this, params); @@ -56,6 +61,7 @@ export default class OnFire { if (once) { listeners.splice(i, 1); i --; + l --; } } } @@ -71,10 +77,12 @@ export default class OnFire { } else { const listeners = this.es[eventName] || []; // clean the event and listener - for (let i = 0; i < listeners.length; i ++) { + let l = listeners.length; + for (let i = 0; i < l; i ++) { if (listeners[i].cb === cb) { listeners.splice(i, 1); i --; + l --; } } }