将自变量前置到自变量,然后应用
Prepend argument to arguments then apply
我有一个函数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]
var args = Array.prototype.slice.call(arguments); // Make real array from arguments
args.unshift("error");
message.apply(this, args);
请参阅如何将";论点";对象到JavaScript中的数组?
在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);
相关文章:
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- Javascript运行php文件,然后下载文件
- 如何将屏幕分辨率乘以 80%,然后在代码中使用
- 弹出窗口出现,然后退出
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 将值输入到对象,然后该对象推送到数组
- 如何临时暂停浏览器渲染,然后恢复整个页面
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 滚动然后捕捉到顶部而不是取消捕捉
- 自变量'customerCtrl'不是NaNuction,未定义
- AngularJS加载JSON数据,然后从中解析/加载HTML
- 有没有一个抽象层,这样我就可以集成一次,然后使用pusher、pubnub或faye
- Canvas+svg路径动画,在路径中的特定点暂停一段时间,然后继续
- 如果30秒未单击,请应用CSS一次,将其删除,然后重新迭代
- 点击相同的按钮打开模型,然后提交表单
- ThreeJS将画布中的文本渲染为纹理,然后应用于平面
- 将display属性更改为visible flicks,然后再次消失
- 什么是“;选择“;然后触发事件
- 等待300毫秒,然后使用jQuery向下滑动菜单
- 将自变量前置到自变量,然后应用