js中经常要写dom 和 数据拼接的情况,下面这种format传参方式可以解决。

$.format = function (source, params) {
if (arguments.length == 1)
return function () {
var args = $.makeArray(arguments);
args.unshift(source);
return $.format.apply(this, args);
};
if (arguments.length > 2 && params.constructor != Array) {
params = $.makeArray(arguments).slice(1);
}
if (params.constructor != Array) {
params = [params];
}
$.each(params, function (i, n) {
source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
});
return source;
};

测试代码:

1 $.format("<div>我是字符串A我的值是{0}  ,我是字符串A我的值是{1}  </div>","aaa","bbb");//'<div>我是字符串A我的值是aaa  ,我是字符串A我的值是bbb  </div>'

 

关于argument:

arguments是一个对象不是一个数组Array 。它类似于Array,但除了length属性和索引元素之外没有任何Array属性。

1 // 由于arguments不是 Array,所以无法使用 Array 的方法,所以通过这种方法转换为数组
2
3 var args = [].slice.call(arguments); // 方式一
4 var args = Array.prototype.slice.call(arguments); // 方式二
5
6 // 下面是 es6 提供的语法
7 let args = Array.from(arguments) // 方式一
8 let args = [...arguments]; // 方式二

 

我从来不相信什么懒洋洋的自由。我向往的自由是通过勤奋和努力实现的更广阔的人生。 我要做一个自由又自律的人,靠势必实现的决心认真地活着。