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

标签 javascript function arguments

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

  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/

相关文章:

c - 从函数返回数组/指针

c - 分配内存并写入(使用 fread)作为参数传递给返回 SIGSEGV 的函数的字符串

C++ 将数组作为值/指针发送的区别

javascript - 在 HTML 中使用 *ngfor 指令解析 JSON

javascript - 无法将 Prop 传递给组件的数据

Javascript - 将对象转换为数组对象

c - 是否可以强制函数参数在 C 中保持不变?

class - 从 Arduino 中的库调用主程序中的函数

c - 复制一个字符串数组(或将它们复制到另一个数组)?

javascript - document.write 和 document.innerHTML 之间有什么区别以及其他 javascript 问题