Function.prototype.call()
함수 인스턴스의 호출 메서드는 함수 내부(즉, 함수가 실행되는 범위)에 this의 포인터를 지정한 다음 지정된 범위 . 그리고 해당 기능은 즉시 실행됩니다.
이 구절을 더 잘 이해하려면 예를 보세요.
var keith = { rascal: 123 }; var rascal = 456; function a() { console.log(this.rascal); } a(); //456 a.call(); //456 a.call(null); //456 a.call(undefined); //456 a.call(this); //456 a.call(keith); //123
위 코드에서 a 함수의 this 키워드가 전역 개체를 가리키는 경우 반환 결과는 456입니다. 호출 메소드에 매개변수가 없거나 매개변수가 널이거나 정의되지 않은 경우, 이는 전역 객체를 가리키는 것과 동일하다는 것을 알 수 있습니다. call 메소드를 사용하여 this 키워드가 keith 객체를 가리키는 경우, 즉 함수가 실행되는 범위가 keith 객체인 경우 반환 결과는 123입니다.
call() 메소드는 두 개의 매개변수를 전달할 수 있습니다. 첫 번째 매개변수는 함수 내 this의 포인터(즉, 함수가 실행되는 범위)를 지정하고, 두 번째 매개변수는 함수 호출 시 전달해야 하는 매개변수이다.
function keith(a, b) { console.log(a + b); } keith.call(null, 1, 2); //3
첫 번째 매개변수는 필수이며 null, undefound, this일 수 있지만 비워둘 수는 없습니다. null, 정의되지 않음으로 설정하면 keith 함수가 현재 전역 범위에 있음을 나타냅니다. 두 번째 매개변수는 하나씩 추가해야 합니다. 적용시 배열 형태로 추가해야 합니다.
호출 메서드의 한 가지 응용 프로그램은 개체의 기본 메서드를 호출하는 것입니다. 배열과 유사한 객체를 배열로 변환하는 데에도 사용할 수 있습니다.
var obj = {}; console.log(obj.hasOwnProperty('toString')); //false obj.hasOwnProperty = function() { return true; } console.log(obj.hasOwnProperty('toString')); //true console.log(Object.prototype.hasOwnProperty.call(obj, 'toString')); //false
위 코드에서 hasOwnProperty는 obj 객체에 상속된 메서드입니다. 이 메서드를 재정의하면 올바른 결과를 얻을 수 없습니다. call 메소드는 이 문제를 해결할 수 있습니다. hasOwnProperty 메소드의 원래 정의를 obj 객체에 넣어 실행하므로 obj에 동일한 이름의 메소드가 있는지 여부에 관계없이 결과에 영향을 미치지 않습니다. hasOwnProperty는 Object.prototype의 네이티브 객체의 메소드이고, call은 Function.prototype에서 상속받은 메소드라는 점에 유의하세요.
위 내용은 Javascript의 함수 호출 메소드 인스턴스 사용법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!