2013-05-16 84 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