먼저 질문을 살펴보겠습니다.
Array.apply(null, {length:5})의 {length:5}를 이해하는 방법? 이 기사에서는 주로 JavaScript의 Array.apply 분석을 공유합니다. 모두를 돕기 위해.
테스트해봤습니다
Array.apply(null, {length:5}) //返回[undefined, undefined, undefined, undefined, undefined] Array.apply(null, [{length:5}])和Array({length:5})返回的结果是一样的,为[[object Object] { length: 5 }]
두번째,세번째도 이해가 되네요! 첫 번째를 어떻게 이해해야 할까요?
사실 이건 Array와는 전혀 관련이 없고, Array를 사용하다가 우연히 접하게 되었습니다.
이 문제는 Function.call과 Function.apply로 해결해야 한다고 생각합니다.
이 두 함수의 메서드는 동일한 함수를 가지며 둘 다 this의 포인터를 변경하는 데 사용됩니다.
유일한 차이점은 매개변수가 다르다는 것입니다. Apply의 두 번째 매개변수는 배열에 전달되어야 합니다.
먼저 iAmArray를 정의하는 함수가 있어야 합니다.
var iAmArray = function(){ return arguments; };
여기서는 걱정하지 마세요. 정상적으로 호출하는 세 가지 방법이 있습니다.
//方便你复制到 Console 中测试,在此再写一遍 var iAmArray = function(){ return arguments; }; //普通写法 iAmArray(1,2,3); /* [1, 2, 3] */ //call写法 iAmArray.call(null,1,2,3); /* [1, 2, 3] */ //apply写法 iAmArray.apply(null,[1,2,3]); /* [1, 2, 3] */
적용 모드에서 호출하면 다음과 같습니다. 아마도 작은 버그일 것입니다. 객체인 한 배열로 처리되는 길이도 있습니다. 이는 실제로 Array와 관련이 없습니다.
//方便你复制到 Console 中测试,在此再写一遍 var iAmArray = function(){ return arguments; }; var iHaveLength = function(length){ this.length = length || 5; this[2] = "第三个元素"; }; /* 只要是 Object,还有length,他就当作数组处理了。 */ iAmArray.apply(null, new iHaveLength()); /* [undefined, undefined, "第三个元素", undefined, undefined] */ iAmArray.apply(null, new iHaveLength(3)); /* [undefined, undefined, "第三个元素"] */
최종 요약
그러면 사실 두 번째 매개변수는 배열형 객체만 있으면 됩니다. 예를 들어 {length: 5}는 길이가 5인 배열형 객체로 간주할 수 있습니다. v[ 0] 과 같은 각 요소는 정의되지 않습니다.
그래서 Array.apply(null, { 길이: 5})는
Array(undefine, undefine, undefine, undefine, undefine)
위 내용은 JavaScript에서 Array.apply 구문 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!