DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> 關於JavaScript >> JavaScript內置對象:arguments
JavaScript內置對象:arguments
編輯:關於JavaScript     

原文: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!

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved