2013-05-16 4 views
2

В настоящее время у меня есть функция, которую я вызываю в конце в нескольких других функциях. Вместо того, чтобы писать так:Функция вызова автоматически внутри других функций

function foo(){ 

    baz(); 
} 

function bar(){ 

    baz(); 
} 

function baz(){ 

} 

Есть ли способ сделать baz() запустить автоматически при вызове funcions? Возможно, изменив прототип других функций и добавив его как IIFE? Это возможно?

+0

Я не думаю, что что-то существует из коробки, но вы можете каким-то образом подделать его. Попробуйте [вопрос] (http://stackoverflow.com/questions/9622639/how-do-i-create-a-javascript-listener-function-that-will-perform-an-action-when) – Catalin

+0

Нет способа стандартный функция завершение метод/событие для такой считаю. Хотя это и не очень чисто, вы можете заменить эти ссылки на функции оболочками, которые вызывают старые функции. http://jsfiddle.net/L2uWt/ –

+0

@ FabrícioMatté Да, у меня на самом деле была схожая идея. Но, как вы сказали, это не очень чисто. Поэтому я бы сказал, что не стоит жертвовать читабельностью. Спасибо за ввод. – Johan

ответ

0

Вы имеете в виду что-то вроде шаблона «Шаблон метода». Если да, попробуйте следующее:

function inherit(proto) { 
    var F = function() { }; 
    F.prototype = proto; 
    return new F(); 
} 

var template = { 
    process: function() { 
     this.mainfunction(); 
     this.baz(); 
    } 
    baz:function(){ 

    } 
}; 

(function run() { 
    var foo = inherit(template); 
    foo.mainfunction = function(){ 
    } 
    foo.process(); 

    var bar = inherit(template); 
    bar.mainfunction = function(){ 
    } 
    bar.process(); 
}()) 
+0

Несмотря на то, что это правильно, я думаю, что буду придерживаться своего первоначального примера из-за читаемости. Спасибо – Johan

+2

Почему так сложно? 'function wrap (f) {return function() {f(); Баз(); }; } ', а затем' foo = wrap (foo); bar = wrap (bar); ' – tom

Смежные вопросы