2015-10-19 125 views
0

我不得不在我的项目中覆盖一个函数。 这里是original.js文件:如何在Javascript中覆盖函数时减少冗余代码?

lib.func = function(a){ 
    //original logic 
} 

这是A.html,我改写func功能:

<script src='original.js'></script> 
<script> 
    var original = lib.func; 
    lib.func = function(a){ 
     //overwrite to modify a 
     a.replace(c, 'new'); 
     original(a);//call original function 
    } 
</script> 

这是B.html在那里我有替换a另一个字符串d

<script src='original.js'></script> 
<script> 
    var original = lib.func; 
    lib.func = function(a){ 
     //overwrite to modify a 
     //***********Different replacement source******** 
     a.replace(d, 'new'); 
     original(a);//call original function 
    } 
</script> 

我的问题是: 有没有办法将这个覆盖逻辑放在一个文件中,我可以在a.htmlb.html中使用它?

+0

是否有其他更改,然后取代'c'和'd'? –

+0

@OAD不,只修改具有不同值的参数'a'。 – JasmineOT

+0

您正试图根据上下文重写逻辑。当你调用lib.func(a)时你将不得不提供一些上下文。为什么你需要这个电话与原来的完全一样?你能接受一个上下文对象吗? – santon

回答

0

您可以将其添加到原始函数,并传递一个字符串参数。您可以通过在字符串PARAM

lib.func = function(a, b){ 
    if (b) a.replace(b, 'new'); 
    // original logic 
} 

这样你就可以重新使用该方法的任何地方,并动态地选择更换需要调用一个if执行原有的功能没有的花絮。 编辑:要清楚的是,如果你不传递第二个参数,那么该方法将执行完全像以前一样,但是当你传递第二个参数时,if语句将捕获它并进行替换。

+0

谢谢,但我的代码仍然只会调用'lib.func(a)'参数。以'require.js'为例。我覆盖'require.load'函数,但我不会以新的方式调用'require'。 – JasmineOT