JavaScript에서 apply() 메소드는 매우 유용한 메소드입니다. 함수를 호출하고 함수의 this 값과 매개변수를 설정하는 데 사용할 수 있습니다. 이 기사에서는 작동 방식을 더 잘 이해하기 위해 apply() 메서드를 직접 작성합니다.
먼저 Apply() 메서드의 구문을 이해해 보겠습니다. 두 개의 매개변수가 필요합니다. 첫 번째 매개변수는 호출할 함수이고, 두 번째 매개변수는 함수에 전달할 매개변수가 포함된 배열 또는 배열류 객체입니다. 아래와 같이
function myFunc(arg1, arg2) { console.log(this.name + arg1 + arg2); } const obj = {name: 'John'}; const args = [1, 2]; myFunc.apply(obj, args); // 输出:John12
위의 예에서는 myFunc() 함수를 호출하기 위해 apply() 메서드를 사용했습니다. 이 값을 obj로 설정하고 인수 목록을 args 배열에 저장합니다. myFunc() 함수의 출력은 두 매개변수에 obj의 name 속성을 추가한 결과입니다.
이제 직접 Apply() 메소드를 작성해 보겠습니다. apply() 메소드의 특정 기능을 시뮬레이션하는 myApply()라는 함수를 생성하여 이를 수행할 수 있습니다. apply() 메소드를 시뮬레이션하려면 먼저 주어진 함수가 존재하는지 확인하고 두 번째 매개변수가 배열 또는 유사 배열 객체이고 객체의 길이가 null이 아닌지 확인해야 합니다. 아래는 myApply() 함수의 코드입니다.
Function.prototype.myApply = function(context, args) { if (typeof this !== 'function') { throw new TypeError('The current object is not a function.'); } if (!Array.isArray(args) && !((args.length !== null) && (args !== ''))) { throw new TypeError('The second argument is not an array or array-like object.'); } const fn = Symbol('fn'); context = context || window; context[fn] = this; const result = context[fn](...args); delete context[fn]; return result; }
위 코드에서는 먼저 호출할 함수가 있는지 확인하고, 없으면 타입 오류를 발생시킵니다. 다음으로 두 번째 매개변수가 배열인지 배열형 객체인지 확인하고, 그렇지 않으면 유형 오류가 발생합니다. 두 매개변수가 모두 유효하면 컨텍스트 객체의 임시 속성으로 고유한 Symbol을 만들고, 함수를 컨텍스트 객체에 바인딩하고, args 인수를 전달하여 호출하고, 결과를 결과 변수에 저장합니다. 마지막으로 컨텍스트 객체에서 이 임시 속성을 제거하고 결과를 반환합니다.
다음으로, 다음 코드와 같이 myApply() 함수를 사용하여 함수를 호출할 수 있습니다.
function myFunc(arg1, arg2) { console.log(this.name + arg1 + arg2); } const obj = {name: 'John'}; const args = [1, 2]; myFunc.myApply(obj, args); // 输出:John12
이 예에서는 myApply() 메서드를 사용하여 myFunc() 함수를 호출합니다. 이 값을 obj로 설정하고 인수 목록을 args 배열에 저장합니다. myFunc() 함수의 출력은 두 매개변수에 obj의 name 속성을 추가한 결과입니다.
이 글에서는 apply() 메소드를 직접 작성하여 함수를 호출하는 데 사용했습니다. 함수가 존재하는지 확인하는 방법과 잘못된 인수 전달을 방지하는 방법을 살펴보았습니다. 이 예제를 통해 apply() 메서드가 작동하는 방식과 이를 직접 작성하는 데 필요한 단계를 더 잘 이해할 수 있습니다.
위 내용은 자바스크립트의 Apply 메소드 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!