【问题标题】:Creating a method/function with dynamic argument arrangement?创建具有动态参数排列的方法/函数?
【发布时间】:2013-10-03 05:28:28
【问题描述】:

这在 jQuery 中一直可见,我想知道他们是如何做到的。我马上给你举个例子:

在 jQuery 的 fadeIn() 动画中,您可以输入三种不同类型参数的组合:

.fadeIn([duration ] [, complete ] );
.fadeIn( options );
.fadeIn( [duration ] [, easing ] [, complete ] );

如图所示,您可以输入不同的参数,顺序并不重要。像fadeIn() 方法那样接受这些参数并相应地处理它们的适当或最实用的方法是什么?我正在构建一个几乎可以以相同方式处理参数的插件:

.flipAnimation([newvalue]);
.flipAnimation([newvalue] [, duration]);
.flipAnimation([newvalue][, duration][, complete()]);
.flipAnimation(options);

谢谢。

【问题讨论】:

标签: javascript jquery methods arguments


【解决方案1】:

我认为它传递了 javascript 对象中的所有参数。

当你需要它时,只需访问该对象属性,例如

function foo(params) {
    if(params['attr1'] != null) {
         // use it
    }

    if(params['attr2'] != null) {
         // use it
    }

    ...
    // so on
}

更新更多详细信息如何使用它。一些让你误解我的东西被删除了

params = {callback: callbackFunctionName OR functionCode, attr1: someValue ... }

// now just call it
foo(params);
// and you have your callback in params['callback'] 
// ofcouse you should review its type
// you have params['attr1'] = someValue
// inside your foo.

【讨论】:

    【解决方案2】:

    一种方法是使用arguments。每个函数在范围内都有一个arguments 变量,其中包含传递给函数的所有参数,无论其签名如何。例如:

    a = function() { console.log(arguments); };
    a(); // []
    a(1,2,3,4);  // [1, 2, 3, 4]
    

    因此,您可以将其与typeof 结合使用来检查用户如何调用您的函数。例如

    foo = function() {
        if(typeof(arguments[0]) == 'function') {
            // do something
        } else if(typeof(arguments[0]) == 'object') {
            // do something else
        }
    };
    
    foo( function() { return 'hi'; } );
    foo( {foo: 'bar'} );
    // both will do something
    

    【讨论】:

      猜你喜欢
      • 2019-12-17
      • 2012-11-25
      • 2019-09-09
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      • 2021-02-27
      • 2018-08-17
      相关资源
      最近更新 更多