gpt4 book ai didi

javascript - 将函数参数映射到变量(如果存在)

转载 作者:行者123 更新时间:2023-11-30 05:41:00 26 4
gpt4 key购买 nike

我正在尝试开发一个带有四个参数的函数

  1. view(字符串)*最小值
  2. 参数(对象)
  3. 代码(函数)*最小值
  4. 回调(函数)

我希望能够将我能够传递的功能传递到最少的函数中,并在需要时与其他函数一起构建。

例如这些都应该有效

myFunction("enter", {"hello": "world"}, function(x){return x}, function(err, result){});
myFunction("enter", function(x){return x}});
myFunction("enter", {"hello": "world"}, function(x){return x}});
myFunction("enter", {"hello": "world"});

可以理解,最后两个参数是函数,我必须选择一个优先。最后一个不是必需的,所以这永远不可能:

myFunction("enter", {"hello": "world"}, function(err, result){});

如果有一个函数参数,myFunction 将假定/优先考虑其中之一。该应用程序将处理该错误。

下面是我试过的,很头疼。

If 语句声明函数并更改它们

if(!arguments[0]) view = arguments[0];
if(!arguments[1]) params = arguments[1];
if(!_.isObject(arguments[1])){
params = false;
code = arguments[1];
callback = arguments[2];
};

每个参数的函数

var view = function(){
if(!arguments[0]) return false;
return arguments[0];
}();

var params = function(){
if(!arguments[1]) return false;
if(!_.isObject(arguments[1])) return false;
return arguments[1];
}();

var code = function(){
if(!arguments[1]) return false;
if(!params) return arguments[1];
if(!arguments[2]) return false;
return arguments[2];
}();

var callback = function(){
//if(!arguments)
}

问题:是否有任何图书馆可以帮助我解决这个问题?

请不要告诉我使用对象来传递所有内容,我已经知道该怎么做了!

最佳答案

Underscore 有一些实用程序可以用来弄清楚你拥有的是什么类型的东西:

你也可以使用 typeofinstanceof测试您是否愿意。然后你可以使用 Function.length尝试区分函数参数。

这会让你用像这样相当简单的东西来解析arguments:

var view, params, code, callback, arg;
for(var i = 0; i < arguments.length; ++i) {
arg = _(arguments[i]);
if(arg.isString())
view = arguments[i];
else if(arg.isFunction() && arguments[i].length === 1)
code = arguments[i];
else if(arg.isFunction() && arguments[i].length === 2)
callback = arguments[i];
else if(arg.isObject())
params = arguments[i];
else
throw 'WTF is argument ' + i + ' all about?';
}

您将根据需要调整测试(特别是 length 检查),并且您可能需要单独的测试以确保指定了两个必需的参数。当然,这不需要任何特定的参数顺序,但它确实希望函数完全按照要求指定;请注意,许多函数包装工具(_.bind$.proxy、CoffeeScript 的 =>,...)将屠夫函数 length 所以这种东西很脆弱。

演示:http://jsfiddle.net/ambiguous/94sgp/

我会在现实生活中使用一个对象,命名事物远胜于猜测。

关于javascript - 将函数参数映射到变量(如果存在),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20820663/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com