如何覆盖Javascript对象的方法

问题描述:

我正在使用允许包含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

你试过了吗? –

是的,你可以重新分配的方法来自己的函数因为你已经提出了:

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

这将成功地更改时.getData(input)属性被称为会发生什么。

+2

您将如何加载原始功能?通过去'var foo = Evaluator.getData;'事先保存它,然后在调用'foo()'的新函数中保存它? – simbabque

是的,你可以。

但是评估者不是一个合适的“班级”。你不能写var x = new Evaluator(); 所以你不是重写,而只是改变变量getData。这就是为什么我们说在JavaScript中,函数是一等公民,像任何变量一样对待。