Другим вариантом использования может быть диспетчер событий, связанный во время выполнения:
MyClass = function () {
this.events = {};
// Fire up an event (most probably from inside an instance method)
this.OnFirstRun();
// Fire up other event (most probably from inside an instance method)
this.OnLastRun();
}
MyClass.prototype.dispatchEvents = function () {
var EventStack=this.events[GetFunctionName()], i=EventStack.length-1;
do EventStack[i]();
while (i--);
}
MyClass.prototype.setEvent = function (event, callback) {
this.events[event] = [];
this.events[event].push(callback);
this["On"+event] = this.dispatchEvents;
}
MyObject = new MyClass();
MyObject.setEvent ("FirstRun", somecallback);
MyObject.setEvent ("FirstRun", someothercallback);
MyObject.setEvent ("LastRun", yetanothercallback);
Преимущество в том, что диспетчер может быть легко повторно использован и не должен получать очередь отправки в качестве аргумента, вместо этого он приходит неявным с именем вызова ...
. В итоге общий представленный здесь случай будет «использовать имя функции в качестве аргумента, чтобы вам не нужно было передавать его явно», и что может быть полезна во многих случаях, например, в качестве необязательного обратного вызова jquery animate () или при обратных вызовах времени / интервалов (т. е. вы передаете только имя пользователя funcion).