Function.prototype.apply()
적용 방법은 호출 방법과 유사하며, 이 지점(함수가 실행되는 범위)을 변경한 다음 지정된 범위에서 함수를 호출합니다. 해당 기능도 즉시 실행됩니다. 유일한 차이점은 함수가 실행될 때 배열을 매개변수로 받는다는 것입니다.
apply 메서드의 첫 번째 매개 변수도 this가 가리키는 개체입니다. null 또는 undef로 설정되거나 this로 설정되면 전역 개체를 지정하는 것과 같습니다. 두 번째 매개변수는 배열이며, 배열의 모든 멤버는 호출 시 차례로 매개변수로 사용되며 원래 함수에 전달됩니다. call 메소드에서는 원래 함수의 매개변수를 하나씩 추가해야 하지만, Apply 메소드에서는 배열 형태로 추가해야 합니다.
전화의 뉘앙스를 보고 신청하세요.
function keith(a, b) { console.log(a + b); } keith.call(null, 2, 3); //5 keith.apply(null, [2, 3]); //5
위 코드에서 첫 번째 매개변수는 null이고 전역 범위를 가리키며 두 번째 매개변수는 약간 다른 형식으로 전달됩니다.
적용 방법에는 다음과 같은 용도가 있습니다.
3.1: 배열에서 최대값 찾기
var a = [2, 4, 5, 7, 8, 10]; console.log(Math.max.apply(null, a)); //10 console.log(Math.max.call(null,2, 4, 5, 7, 8, 10)); //10
Javascript는 배열에서 최대값을 찾는 방법을 제공하지 않습니다. 이를 얻으려면 Function.prototype에서 상속된 Apply 및 Math.max 메서드를 사용하세요. . 배열의 최대값을 반환할 수 있습니다.
3.2: 배열의 빈 요소를 정의되지 않음으로 변경합니다.
적용 메서드를 사용하고 배열 생성자를 사용하여 배열의 빈 요소를 정의되지 않음으로 변경합니다.
console.log(Array.apply(null, [1, , 3])); // [1, undefined, 3]
빈 요소와 정의되지 않은 요소의 차이점은 배열의 forEach 메서드가 빈 요소를 건너뛰지만 정의되지 않은 요소와 null은 건너뛰지 않는다는 것입니다. 따라서 내부 요소를 순회하면 다른 결과를 얻게 됩니다.
var a = [1, , 3]; a.forEach(function(index) { console.log(index); //1,3 ,跳过了空元素。 }) Array.apply(null,a).forEach(function(index){ console.log(index); ////1,undefined,3 ,将空元素设置为undefined })
3.3: 배열 유사 객체 변환
또한 배열 객체의 슬라이스 메서드를 사용하면 배열 유사 객체(예: 인수 객체)를 실제 배열로 변환할 수 있습니다. 물론, 슬라이스 방법의 중요한 적용은 배열과 유사한 객체를 실제 배열로 변환하는 것입니다. 호출과 적용 모두 이 애플리케이션을 구현할 수 있습니다.
console.log(Array.prototype.slice.apply({0:1,length:1})); //[1] console.log(Array.prototype.slice.call({0:1,length:1})); //[1] console.log(Array.prototype.slice.apply({0:1,length:2})); //[1,undefined] console.log(Array.prototype.slice.call({0:1,length:2})); //[1,undefined] function keith(a,b,c){ return arguments; } console.log(Array.prototype.slice.call(keith(2,3,4))); //[2,3,4]
위 코드에서 호출 및 적용 메소드의 매개변수는 모두 객체이지만 반환 결과는 모두 배열이므로 객체를 배열로 변환하는 용도로 사용됩니다. 위 코드에서 볼 수 있듯이 이 방법이 작동하려면 처리되는 객체에 길이 속성과 해당 숫자 키가 있어야 한다는 전제가 있습니다.
위 내용은 Javascript에서 함수 적용 메소드를 사용하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!