# EventHandler

Class · category: Other

Source: https://github.com/playcanvas/engine/blob/dfcc50fbbfba2388843041a875ec0ef5d1a586c5/src/core/event-handler.js#L32

Abstract base class that implements functionality for event handling.

```javascript
const obj = new EventHandlerSubclass();

// subscribe to an event
obj.on('hello', (str) => {
    console.log('event hello is fired', str);
});

// fire event
obj.fire('hello', 'world');
```

## Methods

### fire

```ts
fire(name: string, arg1?: any, arg2?: any, arg3?: any, arg4?: any, arg5?: any, arg6?: any, arg7?: any, arg8?: any): EventHandler
```

Fire an event, all additional arguments are passed on to the event listener.

**Parameters**

- `name` (`string`): Name of event to fire.
- `arg1` (`any`, optional): First argument that is passed to the event handler.
- `arg2` (`any`, optional): Second argument that is passed to the event handler.
- `arg3` (`any`, optional): Third argument that is passed to the event handler.
- `arg4` (`any`, optional): Fourth argument that is passed to the event handler.
- `arg5` (`any`, optional): Fifth argument that is passed to the event handler.
- `arg6` (`any`, optional): Sixth argument that is passed to the event handler.
- `arg7` (`any`, optional): Seventh argument that is passed to the event handler.
- `arg8` (`any`, optional): Eighth argument that is passed to the event handler.

**Returns** [`EventHandler`](https://api.playcanvas.com/engine/classes/EventHandler.md): Self for chaining.

**Example**

```ts
obj.fire('test', 'This is the message');
```

### hasEvent

```ts
hasEvent(name: string): boolean
```

Test if there are any handlers bound to an event name.

**Parameters**

- `name` (`string`): The name of the event to test.

**Returns** `boolean`: True if the object has handlers bound to the specified event name.

**Example**

```ts
obj.on('test', () => {}); // bind an event to 'test'
obj.hasEvent('test'); // returns true
obj.hasEvent('hello'); // returns false
```

### off

```ts
off(name?: string, callback?: HandleEventCallback, scope?: any): EventHandler
```

Detach an event handler from an event. If callback is not provided then all callbacks are
unbound from the event, if scope is not provided then all events with the callback will be
unbound.

Use this form to remove all listeners matching a name (and optionally callback/scope). To
remove a single known subscription, prefer retaining the [EventHandle](https://api.playcanvas.com/engine/classes/EventHandle.md) returned by
[EventHandler#on](https://api.playcanvas.com/engine/classes/EventHandler.md#on) / [EventHandler#once](https://api.playcanvas.com/engine/classes/EventHandler.md#once) and calling its [EventHandle#off](https://api.playcanvas.com/engine/classes/EventHandle.md#off):
it removes exactly that subscription and is faster (no scan of the callback list).

**Parameters**

- `name` (`string`, optional): Name of the event to unbind.
- `callback` ([`HandleEventCallback`](https://api.playcanvas.com/engine/types/HandleEventCallback.md), optional): Function to be unbound.
- `scope` (`any`, optional): Scope that was used as the this when the event is fired.

**Returns** [`EventHandler`](https://api.playcanvas.com/engine/classes/EventHandler.md): Self for chaining.

**Example**

```ts
const handler = () => {};
obj.on('test', handler);

obj.off(); // Removes all events
obj.off('test'); // Removes all events called 'test'
obj.off('test', handler); // Removes all handler functions, called 'test'
obj.off('test', handler, this); // Removes all handler functions, called 'test' with scope this
```

### on

```ts
on(name: string, callback: HandleEventCallback, scope?: any): EventHandle
```

Attach an event handler to an event.

**Parameters**

- `name` (`string`): Name of the event to bind the callback to.
- `callback` ([`HandleEventCallback`](https://api.playcanvas.com/engine/types/HandleEventCallback.md)): Function that is called when event is fired. Note
  the callback is limited to 8 arguments.
- `scope` (`any`, optional): Object to use as 'this' when the event is fired, defaults to
  current this.

**Returns** [`EventHandle`](https://api.playcanvas.com/engine/classes/EventHandle.md): An event handle. For later removal, prefer retaining this handle and
calling its [EventHandle#off](https://api.playcanvas.com/engine/classes/EventHandle.md#off) over [EventHandler#off](https://api.playcanvas.com/engine/classes/EventHandler.md#off) with a name/callback: it
removes exactly this subscription and is faster (no scan of the callback list).

**Example**

```ts
obj.on('test', (a, b) => {
    console.log(a + b);
});
obj.fire('test', 1, 2); // prints 3 to the console
```

**Example**

```ts
// preferred removal: retain the handle and call off() on it
const evt = obj.on('test', (a, b) => {
    console.log(a + b);
});
// some time later
evt.off();
```

### once

```ts
once(name: string, callback: HandleEventCallback, scope?: any): EventHandle
```

Attach an event handler to an event. This handler will be removed after being fired once.

**Parameters**

- `name` (`string`): Name of the event to bind the callback to.
- `callback` ([`HandleEventCallback`](https://api.playcanvas.com/engine/types/HandleEventCallback.md)): Function that is called when event is fired. Note
  the callback is limited to 8 arguments.
- `scope` (`any`, optional): Object to use as 'this' when the event is fired, defaults to
  current this.

**Returns** [`EventHandle`](https://api.playcanvas.com/engine/classes/EventHandle.md): An event handle. For removal before it fires, prefer retaining this
handle and calling its [EventHandle#off](https://api.playcanvas.com/engine/classes/EventHandle.md#off) over [EventHandler#off](https://api.playcanvas.com/engine/classes/EventHandler.md#off) with a
name/callback: it removes exactly this subscription and is faster (no scan of the callback
list).

**Example**

```ts
obj.once('test', (a, b) => {
    console.log(a + b);
});
obj.fire('test', 1, 2); // prints 3 to the console
obj.fire('test', 1, 2); // not going to get handled
```
