2011-09-12 79 views
0

我正在使用允許包含JS文件的框架。在我的JS文件的頂部,我有這樣的:如何覆蓋Javascript對象的方法

<import resource="classpath:/templates/webscripts/org/mycompany/projects/library/utils.lib.js"> 

我要改寫在非常大的utils.lib.js文件中定義一個相當小的方法。作爲框架一部分的文件utils.lib.js不直接進行更改,我只想覆蓋一個方法。 utils.lib.js文件具有如下形式:

var Evaluator = 
{ 
    /** 
    * Data evaluator 
    */ 
    getData: function Evaluator_getData(input) 
    { 
      var ans; 

      return ans; 
    }, 
    ... 
} 

我想更改getData方法的作用。很抱歉的基本問題,但在導入該副本的JS內容到我的JS文件的頂部,我能不能做這樣的事情後的文件:

Evaluator.getData = function Mine_getData(input) 
       { 
        ... 
       }; 
+2

你試過了嗎? –

回答

3

是的,你可以重新分配的方法來自己的函數因爲你已經提出了:

Evaluator.getData = function Mine_getData(input) 
{ 
    ... 
}; 

這將成功地更改時.getData(input)屬性被稱爲會發生什麼。

+2

您將如何加載原始功能?通過去'var foo = Evaluator.getData;'事先保存它,然後在調用'foo()'的新函數中保存它? – simbabque

0

是的,你可以。

但是評估者不是一個合適的「班級」。你不能寫var x = new Evaluator(); 所以你不是重寫,而只是改變變量getData。這就是爲什麼我們說在JavaScript中,函數是一等公民,像任何變量一樣對待。