js 或jquery定义方法时,参数不固定是怎么实现的??
别告诉我是多态啊
就像$.post(url,[data],[callback],[type])一样
它是有一个默认参数的,一般都是如下形式
$.fn.functionName= function(opts) { var defaults = { XXX: XXX, XX: XX }; var options = $.extend(defaults, opts);
//todo:....
本质还是可选参数,也是给了一些默认值,你进源码看看就知道了
JS的函数中,可以用arguments接收所有的方法参数,只要你传了。
$.post(url,aa)
我怎么区分这个aa是data,还是callback,还是type
@网络终结者: 参数顺序啊~如果你想乱序的话,就必须用{url:'', data:''}这种参数写法。
定义函数的时候参数叫做形参,调用函数的时候,参数叫做实参。
在执行函数之前,有一个初始化的准备工作:
其中一个步骤是给形参赋值:实参从左到右依次赋值给形参。实参个数多的话肯定没问题,每一个形参都得到值了,要是实参的个数少,那么剩下的形参值就是undefined
还有一个步骤是准备Arguments Object,也就是楼上说的arguments对象,它有三个属性:
1. callee --- 当前函数的引用,可以用来实现递归调用
2. length --- 实参的个数,也是arguments数组的长度
3. arguments数组的值,也是所有实参依次组成的数组,下标从0开始
另外还有一个特性需要注意:arguments数组和形参是共享数据的,修改一处,另一处也会改变。共享也是有限制的,假如形参有x,y,z三个,但是实参只有两个5,7。这样的话arguments数组的长度只有2,所以只有x与arguments[0],z与arguments[1]共享,z不存在共享,应为没有arguments[2]