귀하의 문제는 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
);
하는 것으로이 만들고 있다는 사실을 숙지를 기존의 버퍼의 새로운 뷰. 새 객체의 내용을 변경하면 원래 객체에 영향을 주며 그 반대의 경우도 마찬가지입니다.
이것이 원하는 경우 일 수 있습니다. 데이터를 복사 할 필요가 없다면 더 효율적이라고 내기하고 있습니다.
'utils.slice.call (array, start, end)'. –
@Rocket 나는 내 마지막 코멘트를 금식했다. 실제로 이것은 좋은 해결책이기도하지만, 그것을 메소드 콜렉션으로 유지하고'.call'로 호출하는 것은 혼란 스럽다. 하지만 고마워, 나를 많이 자바 스크립트를 이해하는 데 도움이! –