如何覆盖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)
{
...
};
答
是的,你可以重新分配的方法来自己的函数因为你已经提出了:
Evaluator.getData = function Mine_getData(input)
{
...
};
这将成功地更改时.getData(input)
属性被称为会发生什么。
+2
您将如何加载原始功能?通过去'var foo = Evaluator.getData;'事先保存它,然后在调用'foo()'的新函数中保存它? – simbabque
答
是的,你可以。
但是评估者不是一个合适的“班级”。你不能写var x = new Evaluator(); 所以你不是重写,而只是改变变量getData。这就是为什么我们说在JavaScript中,函数是一等公民,像任何变量一样对待。
你试过了吗? –