我有一个函数message
,它接受一个参数来定义消息的类型,然后它连接任何其他参数以形成消息,纯粹是一个精确的。
看起来像这样:
function message(type) {
var msg = _.rest(arguments).join(" ");
// Really the type will be used to set the class on a div
// But I'm just using console.log to keep it simple for now.
console.log(type + ": " + msg);
}
我想提供帮助函数error
,warning
,info
,只需使用正确的类型调用message
即可。我只是不确定最好的方法来解决这个问题。我不能想到两种方法,但我不确定我是否正确地解决了这个问题,或者我可能会过度复杂化。
第一种方式看起来有点多余,创建一个包含第一个arg的新数组,然后将参数压平。
message.apply(this, _.flatten(["error", arguments]));
第二种方式感觉有点......凌乱?
Array.prototype.unshift.call(arguments, "error");
message.apply(this, arguments);
虽然来自我的经历:
(function() {
Array.prototype.unshift.call(arguments, 0);
console,log(arguments);
})(1, 2, 3);
我得到以下输出:
[0, 1, 2, 3, undefined, undefined, undefined, ..., undefined]
答案 0 :(得分:8)
var args = Array.prototype.slice.call(arguments); // Make real array from arguments
args.unshift("error");
message.apply(this, args);
请参阅How can I convert the "arguments" object to an array in JavaScript?
答案 1 :(得分:5)
在ES5中,这可能比首先转换为真实数组然后unshift
更有效:
var args = Array.prototype.concat.apply(["error"], arguments);
message.apply(this, args);
编辑:最好避免扁平化输入数组:
var args = ["error"];
args.push.apply(args, arguments);
message.apply(this, args);