2013-05-07 17 views
0

在javscript我們可以做到這一點的Javascript串聯文本類似於如何可以添加

var text = "the original text"; 

text+=";Add this on"; 

功能如果庫具有已定義的函數(例如)

//In the js library 
library.somefunction = function() {...}; 

有沒有一種辦法添加一些東西,以便我可以運行兩個函數?

var myfunction = function() {...}; 

喜歡的東西:

library.somefunction += myfunction 

這樣既myfunction()和原始library.somefunction()都運行?

+1

是否要將庫的函數更改爲運行原始函數和自定義函數,還是希望運行這兩個函數的新函數? – 2013-05-07 08:19:43

+0

我想讓圖書館的原始功能都變更爲同時運行 – Akshat 2013-05-07 08:29:44

+0

您能否檢查差異http://jsfiddle.net/TLStb/ – rab 2013-05-07 09:29:43

回答

1

您可以使用這種代碼(保留範圍空使用默認範圍):

var createSequence = function(originalFn, newFn, scope) { 
    if (!newFn) { 
     return originalFn; 
    } 
    else { 
     return function() { 
      var result = originalFn.apply(scope || this, arguments); 
      newFn.apply(scope || this, arguments); 
      return result; 
     }; 
    } 
} 

然後:

var sequence = createSequence(library.somefunction, myFunction); 
+0

究竟是我在找什麼!謝謝! – Akshat 2013-05-07 08:31:35

+0

你能檢查http://jsfiddle.net/TLStb/ – rab 2013-05-07 09:30:14

+0

結果的差異嗨,我檢查了它,它沒有通過originalFn.apply的範圍。修正了現在 – 2013-05-07 15:47:00

0

我想你要創建的是一個Hook(功能) - 你想打電話library.somefunction,但添加一些你自己的代碼以前運行。如果是這樣的話,你可以讓你的myfunction在完成一小段代碼後調用或返回庫函數。

var myfunction = function() { 

    // your code 
    // ... 

    return library.somefunction(); 
} 
+0

我還需要確保myfunction()在library.somefunction()被調用時被掛鉤 – Akshat 2013-05-07 08:43:14

相關問題