你能有效地重置功能输入顺序吗
Can you reset function input order efficiently?
这里有一个想法:我希望能够做到这一点,这样我就可以改变函数中输入的顺序。假设正常函数看起来是这样的:
var f = function(a,b,c,d){
return a * b / c + d;
}
我希望能够重新定义函数,这样当用户调用f(w,x,y,z)
时,如果变量(比方说changed
)为true,它就好像用户调用了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);
}
}
然后用newF
调用替换所有f
调用,但这不是我所要求的。
是否可以重新定义与实际函数同名的函数,以及如何做到这一点?如果我不能,请解释为什么不能。
说明:
我之所以想这么做,是因为我有一个应用程序,它有一个功能,可以让一切听起来都很自然(就像直线上的点是直的),但如果我切换一些值,它会产生一个有趣、不切实际的情况,我认为这将是一个有趣的选择。我上面的选项是可行的,我可以使用它,但我只是想知道是否可以将它保留在相同的函数名
是否可以重新定义与实际函数同名的函数,以及如何做到这一点?
是的,您可以重新分配给它的标识符:
f = function(a,b,c,d) {
if (changed)
return a * d / c + b;
else
return a * b / c + d;
};
如果你需要调用实际的函数,因为你不知道它的确切内容(但想截取它的参数),你可以做
f = (function(oldF) {
return function(a,b,c,d){
if (changed)
return oldF(c,d,b,a);
else
return oldF(a,b,c,d);
};
})(f);
var oldF = f;
f = function( ... ){
// do stuff
oldF(...);
};
使用在运行时返回正确函数的工厂方法。
除了"你为什么要",你还可以做这样的事情:
var changed = false;
var f = function(a,b) {
console.log("original function: " + a + "," + b);
}
f = (function(original) {
return function(a,b) {
console.log("new function");
if (changed) {
console.log("order changed");
original(b,a);
}
else {
original(a,b);
}
}
})(f);
f(1,2);
changed = true;
f(1,2);
将输出(在控制台中):
new function
original function: 1,2
new function
order changed
original function: 2,1
小提琴
好吧,首先,只要你定义了这样的函数:
var f = function(...){...};
那么你可以很容易地覆盖它。但当你这样做时:
function f(...){...}
简单地说,当您用function f(...){...
声明函数时,编译器将首先以这种方式查找每个声明的函数,然后运行代码。另一方面,声明为变量f将在运行时存储函数,而不是在预处理期间。因此这样声明:
function f(){
console.log('a');
};
f();
function f(){
console.log('b');
}
f();
将输出b b
,小提琴像这样:
var f = function () {
console.log('a');
};
f();
f = function () {
console.log('b');
}
f();
将输出a b
,小提琴
现在,我从不把参数放在示例中,因为JS不关心类型和参数大小。imo最好的方法是这样做:
var myProject = {};
myProject.fn = {
f: function(args,options){
//in your case while you need a,b,c,d you can use the args array to store them
//options to define the 'changed' thing or whatever you need
}
}
- 从表单中获取用户输入执行计算(操作顺序)并输出回该表单
- 按字母顺序对输入单选框进行排序
- 用于提示输入和输出的JavaScript按字母顺序排序
- 如果我更改输入顺序,为什么控制台会给我不同的输出,如下所示
- 如何在 php 中存储添加输入的顺序
- 根据jQuery中的列表顺序更改输入值
- 你能有效地重置功能输入顺序吗
- 按字母顺序对输入/复选框元素进行排序
- 如何按顺序给出数字即使我删除了一行输入,顺序也不应该重复
- 是否有一种方法可以更改使用输入上传文件的顺序
- 如何禁用输入顺序和选择中的选项
- JQuery语法错误,自动填充监听器和keyup触发器在循环和寻找顺序命名的输入
- 新版本的FF改变了输入属性的顺序
- 输入按钮到文本区域和书写顺序
- 是按字母顺序输入的数值,由ng-model保存
- 在数组中存储javascript弹出框输入并按字母顺序显示
- 我在输入元素上列出下列内容的顺序有关系吗?
- 字母顺序复选框输入类型
- 简单的方式来改变输入字段的视觉顺序动态(不改变表单HTML)
- 用jquery按正确顺序动态插入输入