我有一个 Uint8Array
,我想在其上使用 slice
方法。
所以我利用了这样的数组切片方法:
Array.prototype.slice.call(array, start, end);
现在我想外包一些像这样的常用功能。
我尝试过
var utils = {
slice: function() {
return Array.prototype.slice.apply(this, arguments);
}
};
但显然我误解了它的真正工作原理。有人可以向我解释一下这一点以及如何实现它以开始工作吗?
最佳答案
你的问题在于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
);
请注意
Note: Keep in mind that this is creating a new view on the existing buffer; changes to the new object's contents will impact the original object and vice versa.
这可能就是您想要的 - 我敢打赌它会更有效 - 如果您不需要复制数据,那就是!
关于javascript - 如何传递参数并应用于函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11561673/