4

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

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

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

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

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

谢谢你。

4

2 回答 2

3

一种方法是使用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
于 2013-09-27T02:55:11.050 回答
-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.
于 2013-09-27T02:50:57.840 回答