这在jQuery中一直可以看到,我想知道他们是如何做到的。我给你举个例子:
在jQuery的fadeIn()
动画中,你可以输入三种不同类型的参数的组合:
.fadeIn([duration ] [, complete ] );
.fadeIn( options );
.fadeIn( [duration ] [, easing ] [, complete ] );
如图所示,您可以输入不同的参数,顺序并不重要。接受这些论点并像fadeIn()
方法那样相应地处理它们的适当或最实用的方法是什么?我正在构建一个插件,它几乎以相同的方式处理参数:
.flipAnimation([newvalue]);
.flipAnimation([newvalue] [, duration]);
.flipAnimation([newvalue][, duration][, complete()]);
.flipAnimation(options);
谢谢。
一种方法是使用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
我认为它传递了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.