你的问题在于这this
不是你想的那样。如果你打电话utils.slice(foo, 1, 2)
,this
就会utils
。
根据您要如何调用它,您可以将要操作的对象作为第一个参数传递,然后您将执行以下操作:
var utils = {
slice: function() {
// The object we're operating on
var self = arguments[0];
// The rest of the arguments
var args = Array.prototype.slice.call(arguments, 1);
return Array.prototype.slice.apply(self, args);
}
};
用法:
var someSlice = utils.slice(someArray, 2, 14);
另一个(也许更清楚)选项是只使用命名参数:
var utils = {
slice: function(array, from, to) {
return Array.prototype.slice.call(array, from, to);
}
};
这将以相同的方式工作。
更新:我很好奇为什么Uint8Array
没有slice
,我发现了subarray
:
Int8Array subarray(
long begin,
optional long end
);
注意
注意:请记住,这是在现有缓冲区上创建一个新视图;对新对象内容的更改将影响原始对象,反之亦然。
可能这就是你想要的——我打赌它会更有效率——如果你不需要复制数据,那就是!