2015-04-20 51 views
0

我手邊有一個看似很大的問題。我有一個Javascript文件,我們稱之爲helloworld.js。我根本無法編輯該文件。但是,裏面有一個名爲function buildDropdown(){}的函數。重寫Javascript函數?

我需要能夠只修改該功能,而無需編輯文件。我可以在加載helloworld.js文件之前或之後添加另一個.js文件。我猜測必須有一種方法來編寫patch .js文件來覆蓋function buildDropdown(){}。有沒有簡單的方法讓js告訴它忽略前面的function buildDropdown(){}並使用我的function buildDropdown(){}來覆蓋它?

+4

最後定義的函數將是最終版本。 – MaxZoom

+1

有答案在那裏,快速谷歌會得到你這些http://stackoverflow.com/questions/296667/overriding-a-javascript-function-while-referencing-the-original http://stackoverflow.com /問題/ 19301516 /覆蓋-JS-功能從-另一個文件 –

回答

1

你只可以重新定義函數,它將覆蓋先前定義的函數:

<script src="helloworld.js"> 
    function buildDropdown(){ 
     /* Old Function */ 
    } 
</script> 
... 
<script src="yourScript.js"> 
    function buildDropdown(){ 
     /* New code here */ 
    } 
</script> 
1

只需在原件後定義你的。假設你不需要在原文中保留任何東西。如果你這樣做。 。 。就像如果你需要用它例如別的東西,你可以做這樣的事情:

var origBuildDropdown = buildDropdown; 
function buildDropdown() { 
    // Do pre-function stuff 

    // Invoke original function 
    origBuildDropdown(); 

    // Do post-function stuff 
} 
1

幾個答案已經解釋瞭如何做你想做的事情,但似乎值得解釋爲什麼。

您(或您加載的某個隨機腳本文件)定義的每個javascript函數都只是一個對象。這是一個變量聲明。因此,它可能在運行時被重新定義。就此而言,您可以動態地這樣做......自修改代碼是完全可能的,但這並不意味着它通常是一個好主意。

像任何其他變量聲明,函數具有範圍 - 這是非常合情合理的,一旦你開始思考他們作爲變量。根據您的黑盒文件定義您需要的功能的位置,您可能需要深入到某個對象的結構中幾層以重新定義它。但這是可以完成的。