【发布时间】:2013-07-03 14:41:32
【问题描述】:
我的想法是:我希望能够做到这一点,以便我可以更改输入在函数中的重要性的顺序。假设普通函数如下所示:
var f = function(a,b,c,d){
return a * b / c + d;
}
我希望能够重新定义该函数,这样当用户调用f(w,x,y,z) 时,如果变量(比如changed)为真,就好像用户调用了f(w,z,y,x)! (不是具体的倒序,只是和原函数的顺序不同)
如果我想编写一个单独的函数,我可以这样做:
var newF = function(a,b,c,d){
if(changed === true){
return f(c,d,b,a);
}
else{
return f(a,b,c,d);
}
}
然后将所有f 调用替换为newF 调用,但这不是我要的。
是否可以重新定义与实际函数同名的函数,如何实现?如果我不能,请解释为什么不能。
说明:
我想这样做的原因是因为我有一个应用程序,该应用程序具有使一切听起来自然的功能(例如直线中的点是直的),但如果我切换某些值,它会创建一个有趣的、不切实际的, 情况,我认为这将是一个有趣的选择。我上面的选项是可行的,我可以使用它,但我只是想知道是否可以将它保留在相同的函数名称中
【问题讨论】:
-
我不确定我是否理解您为什么要这样做。您希望通过像这样动态更改参数的顺序来实现什么?
-
这有必要吗?根据断开连接变量的值,具有具体函数的行为会有所不同,这听起来像是灾难的秘诀
-
也许您希望函数接受一个对象,其中每个属性都是一个参数,而不是接受多个参数。那么调用者就不用担心顺序了。
-
你这样做实际上是想解决什么问题,因为我很确定这是一个糟糕的主意。
-
您可以备份旧功能然后重新定义它。
var _oldF = f; var f = function(){ // call _oldF }.
标签: javascript function