>  기사  >  웹 프론트엔드  >  Array.prototype.slice.apply_javascript 스킬 사용 방법

Array.prototype.slice.apply_javascript 스킬 사용 방법

WBOY
WBOY원래의
2016-05-16 18:32:081622검색
코드 복사 코드는 다음과 같습니다.

function test(){ 
 //Convert the
var args = Array.prototype.slice.apply(arguments);
Alert(args);
}

arguments는 함수에 고유한 개체입니다. JavaScript 구문 속성(Arguments 개체)은 함수 호출 시 전달된 실제 매개 변수를 참조하는 데 사용됩니다. 이 객체는 배열과 매우 유사하며 길이 속성을 가지며 아래 첨자를 사용하여 해당 요소를 가져오지만 실제 Array 객체는 아닙니다. Arguments 객체에 대한 자세한 내용은 "JavaScript 최종 가이드"를 참조하세요.
따라서 Argument.slice()를 직접 호출하면 Argument가 실제 배열이 아니기 때문에 "객체가 이 속성 또는 메서드를 지원하지 않습니다." 오류가 반환됩니다. Array.prototype.slice.apply(arguments)를 호출하는 위 코드의 중요성은 함수의 매개변수 객체를 실제 배열로 변환할 수 있다는 것입니다. JavaScript 스크립트 엔진이 어떻게 구현되는지는 모르지만 이 방법은 실제로 효과적이며 주류 브라우저에서 테스트되었습니다. 한편, Arguments 객체와 Array 객체 사이의 관계도 유추할 수 있습니다. JavaScript를 작성할 때 처리를 위해 인수 객체를 배열로 변환해야 하는 상황이 자주 발생하는 경우 이 기술이 도움이 될 수 있습니다.
이 기술은 유명한 Douglas Crockford에서 나왔습니다. 확장하면 다음과 같은 다른 Array 프로토타입 메서드도 인수에 적용할 수 있습니다.
var arg0 = Array.prototype.shift.apply(arguments);
Shift는 Array의 인스턴스 메서드이기도 하며, 배열의 첫 번째 요소를 반환합니다. 물론, 위의 호출은 실행 가능하지만 완전히 중복됩니다. 인수[0]을 직접 호출하는 것만큼 간단하고 직접적이지는 않습니다. 확장하면 이 기술을 Array.prototype.slice.apply(document.getElementsByTagName('div')); 와 같은 배열과 유사한 많은 컬렉션 객체에 적용할 수도 있습니다. 그러나 불행히도 IE는 이러한 호출을 지원하지 않습니다. Firefox와 Opera는 모두 올바른 결과를 얻습니다.
Prototype 1.4에 추가된 $A() 메서드는 인수를 배열로 변환하는 데에도 일반적으로 사용됩니다.
코드 복사 코드는 다음과 같습니다.

var $A = Array.from = function(iterable) {
if(!iterable) return[]
if( iterable.toArray ) {
returniterable.toArray();
} else {
varresults = [];
for(vari=0; i returnresults;
} 
}

Prototype은 최대 호환성을 보장하기 위해 for 루프를 사용하여 새 배열을 구성합니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.