>  기사  >  웹 프론트엔드  >  Javascript의 함수 호출 메소드 인스턴스 사용법에 대한 자세한 설명

Javascript의 함수 호출 메소드 인스턴스 사용법에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-07-20 14:07:263934검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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