【发布时间】:2014-03-30 18:02:55
【问题描述】:
我在阅读 pallet.js 的源代码时遇到了这个问题。
var ret = (function(proto) {
return {
slice: function(arr, opt_begin, opt_end) {
return proto.slice.apply(arr, proto.slice.call(arguments, 1));
},
extend: function(arr, arr2) {
proto.push.apply(arr, arr2);
}
};
})(Array.prototype);
var slice = ret.slice;
var extend = ret.extend;
为什么这是必要的?为什么他们不能简单地写这个:
var slice = function(arr,opt_begin,opt_end) {
return Array.prototype.slice.apply(arr,[opt_begin,opt_end]));
}
var extend = function(arr,arr2) {
return Array.prototype.push.apply(arr,arr2);
}
编辑 1:
针对重复的问题。我不认为这是重复的,但这个问题确实解决了我的问题。所以这是一个优化。但是不是每个都只评估一次吗?那么对于两个函数调用,这里真的有显着的改进吗?
另外,如果我们担心性能,为什么我们调用proto.slice.call(arguments,1) 而不是手动构造两个元素的数组[opt_begin,opt_end],切片更快吗?
【问题讨论】:
标签: javascript