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

Javascript
jQuery生成asp.net服务器控件的代码
javascript 实现的完全兼容鼠标滚轴缩放图片的代码
JavaScript学习笔记(十七)js 优化
使用SyntaxHighlighter实现HTML高亮显示代码的方法
javascript contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
利用jQuery 实现GridView异步排序、分页的代码
jquery.lazyload 实现图片延迟加载jquery插件
Lazy Load 延迟加载图片的 jQuery 插件
jquery 插件实现图片延迟加载效果代码
javascript小数计算出现近似值的解决办法
jquery1.4后 jqDrag 拖动 不可用
jquery 应用代码 方便的排序功能
选择TreeView控件的树状数据节点的JS方法(jquery)
jquery 图片Silhouette Fadeins渐显效果
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
javascript 同时在IE和FireFox获取KeyCode的代码
js 键盘记录实现(兼容FireFox和IE)
javascript 函数速查表
jQuery AnythingSlider滑动效果插件
经典海量jQuery插件 大家可以收藏一下

Javascript 中的 JavaScript内置对象:arguments


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-28   浏览: 88 ::
收藏到网摘: 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!