当前位置: 首页 > 图文教程 > 网络编程 > Javascript > JavaScript内置对象:arguments

Javascript
jQuery中isFunction方法的BUG修复
将函数的实际参数转换成数组的方法
javascript 删除数组中重复项(uniq)
js 巧妙去除数组中的重复项
javascript下一种表单元素获取方法存在的问题
javascript 三种数组复制方法的性能对比
js 多层叠的TAB选项卡
javascript 自动标记来自搜索结果页的关键字
起点页面传值js,有空研究学习下
javascript 的Document属性和方法集合
JavaScript 使用简略语法创建对象的代码
使用JQuery进行跨域请求
jquery 经典动画菜单效果代码
jquery 常用操作方法
js提示信息jtip封装代码,可以是图片或文章
javascript面向对象的方式实现的弹出层效果代码
jquery中的sortable排序之后的保存状态的解决方法
js或css实现滚动广告的几种方案
使用JavaScript库还是自己写代码?
js 右键菜单,支持不同对象不同菜单(兼容IE、Firefox)

Javascript 中的 JavaScript内置对象:arguments


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 90 ::
收藏到网摘: n/a

原文:arguments: A JavaScript Oddity. 很不错的文章,推荐一读。我的一点读后感:

arguments是JavaScript里的一个内置对象,和NodeList类似,拥有length属性,但没有push和pop等数组方法。

Dean Edwards的format函数很触发灵感:

function format(string) { var args = arguments;	var pattern = new RegExp('%([1-' + args.length + '])', 'g');	return String(string).replace(pattern, function(match, index) {	return args[index];	});
}
alert(format('%1 want to know whose %2 you %3', 'I', 'shirt', 'wear'));

注意三点:1. String(string)的用法,保证了string为任何值(比如null, false, 123等)时都不会出错。2. 温习下replace方法,第二个参数可以是函数,非常灵活。3. arguments和正则的巧妙配合,实现了format功能。

将arguments转换为真实数组的办法:

var args = Array.prototype.slice.call(arguments);

这个没什么好说的,类数组对象转换为数组都可以采用slice方法。

创建带预置参数的函数:

function makeFunc() { var args = Array.prototype.slice.call(arguments); var func = args.shift(); return function() { return func.apply(null, args.concat(Array.prototype.slice.call(arguments))); };
}
var majorTom = makeFunc(format, "This is Major Tom to ground control. I'm %1.");
majorTom("stepping through the door");
majorTom("floating in a most peculiar way");

这个挺有意思的。makeFunc是一个可以创建函数的函数,所创建的函数都带有相同的的预置参数。这能避免代码重复,提高复用性。

创建自引用的函数:

function repeat(fn, times, delay) { return function() { if(times-- > 0) { fn.apply(null, arguments); var args = Array.prototype.slice.call(arguments); var self = arguments.callee; setTimeout(function(){self.apply(null,args)}, delay); } };
}
function comms { alert('s'); }
var somethingWrong = repeat(comms, 3, 2000);
somethingWrong("Can you hear me, major tom?");

其实就是arguments.callee的用法,经常在匿名函数中用来引用自身,这里用来实现repeat函数。注意repeat是一个创建函数的函数,因此有了somethingWrong. 思路有点绕,但想想明白后,很不错。

用原文中的最后一句话来结尾:

arguments is not often used, a little quirky, but full of surprises and well worth getting to know!