あなたの問題は、それ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
);
ご了承ください
注: これは、既存のバッファーに新しいビューを作成していることに注意してください。新しいオブジェクトのコンテンツへの変更は元のオブジェクトに影響を与え、その逆も同様です。
データをコピーする必要がない場合、これはあなたが望むものかもしれません-私はそれがはるかに効率的であることに賭けています-つまり!