![](/img/trans.png)
[英]What is the difference between two ways of defining object methods in Javascript?
[英]What is the difference between these two ways to leverage the arguments object in a JavaScript function?
在Array.prototype.slice
方法的文档中说:
可以使用Function.prototype的.call函数完成绑定,也可以使用[] .slice.call(arguments)而不是Array.prototype.slice.call减少绑定。
function getArgs() {
var args = [].slice.call(arguments);
return args;
}
getArgs(1,2,3); // returns [1, 2, 3]
function getArgs2() {
var args = Array.prototype.slice.call(arguments);
return args;
}
getArgs2(1,2,3); // returns [1, 2, 3]
本质上有什么区别? 使用一种方法是否比使用另一种方法具有性能优势? 还是前者更容易输入?
两者都做同样的事情,那就是调用数组.slice()
方法。 第一种方法是通过从一个新的空数组进行隐式原型查找来获取函数,另一种方法显式地转到Array.prototype
对象。 性能可能存在差异,但并不重要或无关紧要,因为两种方式都将浪费很多性能:将arguments
对象从函数中传递出去可能会使运行时系统放弃优化功能。
为避免性能下降,应改为使用简单的本地for
循环:
function foo() {
var args = [];
for (var i = 0; i < arguments.length; ++i) args[i] = arguments[i];
// ...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.