Ja, in einigen Situationen ist es das bevorzugte Design, um Funktionen in einem Array zu speichern.
Stellen Sie sich die folgende EventEmitter
Klasse vor. Sie können Ereignis-Listener mit einer Methode namens on
registrieren und ein Ereignis mithilfe von emit
senden. Die Funktionen werden in einem Array gespeichert:
var EventEmitter = function() {
this._events = {};
};
EventEmitter.prototype.on = function (event, listener) {
if (!this._events.hasOwnProperty(event)) {
this._events[event] = []; // stores the listeners bound to the event's name
}
this._events[event].push(listener); // add the listener to the event's listeners array
};
EventEmitter.prototype.emit = function (event) {
var args = Array.slice(arguments, 1);
if (this._events.hasOwnProperty(event)) {
this._events[event].forEach(function (listener) {
listener.apply(null, args);
});
}
}
var emitter = new EventEmitter();
// push the first function to the array
emitter.on('event-a', function (data) {
console.log('Event A was fired!');
});
// push the second function to the array
emitter.on('event-a', function (data) {
console.log('Second listener to event A');
});
emitter.on('event-b', function (a, b, c) {
console.log('Event B:', a + b + c);
});
emitter.emit('event-a');
setTimeout(function() {
emitter.emit('event-b', 2, 3, 4);
}, 1500);
diesem Grund habe ich es in einigen Situationen verwenden würde. Ich halte es nicht für eine schlechte Übung.