日期:2014-05-16  浏览次数:20348 次

关于函数参数的问题
采用js实现国际化的时候,通常需要传递一些参数。

var pattern = "hello, {0}. welcome you come back!";
通过接口,String.format(pattern, "John");来显示
hello, John. welcome you come back!

如果我现在传递参数大于1个,在方法中继续添加参数就可以,即
var pattern = "{0}-{1}-{2}";
String.format(pattern, "p1", "p2", "p3");

现在的问题是,我想封装一个方法,让程序自己实现判断是一个参数还是多个参数。
function display(pattern, params){
// 这个时候,参数封装在params这个数组里
// 实现提示信息的国际化
}

谢谢啦~~~

------解决方案--------------------
String.format是微软的Javascript扩展,猜想是想实现“传递参数数组而不是由一至多个参数+逗号形式的参数列表,完成String.format”功能,并不严谨地实现如下:
JScript code
var display = function (pattern, params) {
    var i = 0;
    while (params.length) {
        pattern = pattern.replace('{' + i + '}', params.shift());
        i++;
    }
    return pattern.replace(/{\d+}/g, '');
};

var str = display("{0},{1},{3},{10}", [1, 2, 3, 5]);
alert(str);

------解决方案--------------------
在js方法中参数名只是个代号,传入方法的诗歌arguments数组
判断参数个数 arguments.length
使用的话就是agguments[index]
------解决方案--------------------
循环数组进行操作不就行啦
------解决方案--------------------
读了下源文件,直接使用其内容方法,代码只有一行如下:
JScript code
var display = function (pattern, params) {
    return String._toFormattedString(false, [pattern].concat(params));
};
var str = display("{0},{1},{3},{10}", [1, 2, 3, 5]);
alert(str);

------解决方案--------------------
把params作为一个字串变量,多个参数在字串里用逗号或其它分隔符分隔,在函数里用SPLIT切分成数组即可,然后可以检测数组的长度,即 数组.length。
------解决方案--------------------
arguments.length获得实际传入的参数
arguments.callee.length获得本应传入的参数
对于实际传入的参数 可以用arguments[i]来获取