>  기사  >  웹 프론트엔드  >  호출에 대한 노트를 연구하고 Javascript_javascript 기술에 적용하십시오.

호출에 대한 노트를 연구하고 Javascript_javascript 기술에 적용하십시오.

WBOY
WBOY원래의
2016-05-16 16:35:59997검색

먼저 MDN의 call 설명을 살펴보겠습니다

call() 메소드는 지정된 this 값과 지정된 여러 매개변수 값을 사용하여 함수 또는 메소드를 호출합니다.

참고: 이 메소드의 기능은 apply() 메소드와 유사합니다. 유일한 차이점은 call() 메소드는 여러 매개변수 목록을 허용하는 반면, apply() 메소드는 여러 매개변수를 포함하는 배열을 허용한다는 것입니다.

문법

fun.call(thisArg[, arg1[, arg2[, ...]]]) 

매개변수
thisArg

fun 함수가 실행될 때 지정되는 이 값입니다. 함수가 실행될 때 지정된 this 값이 반드시 실제 this 값일 필요는 없습니다. 함수가 엄격하지 않은 모드에 있는 경우 null 및 undef로 지정된 this 값은 자동으로 전역 개체를 가리킵니다. 브라우저의 경우 창 개체입니다. 값이 기본 값(숫자, 문자열, 부울 값)인 이 개체는 기본 값의 자동 래핑 개체를 가리킵니다.

arg1, arg2, ...

지정된 매개변수 목록입니다.

MDN의 예제는 처음에는 이해하기 쉽지 않아서 여기에 게시했습니다. 관심이 있으시면 직접 확인하실 수 있습니다. call-Javascript

여기서 thisArg는 fun이 실행될 때 지정된 this 값으로 해석됩니다. 즉, call을 사용한 후 this는 thisArg?를 가리킵니다. 코드를 보세요

 var p="456"; 
 function f1(){ 
  this.p="123"; 
 } 
 function f2() { 
  console.log(this.p); 
 } 
 f2();       //456  f2.call(f1());  //123  f2.apply(f1());  //123

첫 번째 출력은 호출의 전역 변수입니다. 나중에 호출 및 적용을 사용하여 f2의 이것이 f1을 가리키므로 출력은 123이 됩니다. 실제로 f1은 f2의 메서드를 빌려서 그 값을 출력합니다. 나만의 p

이때, f1()에서 this.p를 삭제하면 3개의 456이 출력되는데, 이것이 null이거나 정의되지 않은 경우 실제로 전역 변수를 가리키는지 확인합니다

원래 값을 가리키는 것은 해당 패키징 개체를 가리키는 것입니다. 제가 이해하는 패키징 개체는 일시적이고 테스트에서는 개체가 아닌 원래 값의 유형만 출력하므로 여기서 어떻게 증명할 수 있습니까? 아시는 분 계시나요? 저와 함께 토론해 보시기 바랍니다. 감사합니다!

호출은 하나의 객체가 다른 객체를 빌려 실현할 수 있으므로 상속도 구현할 수는 없을까요? 코드를 보세요

 function f1(){ 
  this.father="father"
 } 
 function f2() { 
  f1.call(this); 
  this.child="child"; 
 } var test=new f2(); 
console.log(test.father);  //father

f2()의

때문에 테스트에 아버지가 없습니다.

f1.call(this);

여기서는 f2를 가리키며, 이는 f2가 실제로 상속을 구현하는 f1의 메서드를 차용한다는 의미입니다

여기서 매개변수에 대해 이야기해 보겠습니다. 여기서 매개변수는 fun에 전달됩니다.

 function f1(){ 
  this.p="123"; 
 } 
 function f2(x) { 
  console.log(this.p); 
  console.log(x); 
 } 
 f2.call(f1(),456);   //123 
//456

첫 번째 출력은 f1의 p 때문에 123이고, 후속 456은 f2에 전달되는 매개변수입니다.

가장 중요한 것은 호출 시 매개변수와 적용 매개변수의 차이에 주의하는 것입니다

call은 하나씩 전달되고 Apply는 배열로 전달됩니다

  function f1(){ 
  this.p="测试call"; 
 } 
 function f2(x,y,z) { 
  console.log(this.p); 
  console.log(x); 
  console.log(y); 
  console.log(z); 
 } 
   function f3(){ 
  this.p="测试apply"; 
 } 
 f2.call(f1(),4,5,6);  
 f2.call(f1(),[4,5,6]);  
 f2.apply(f3(),[4,5,6]); 
 f2.apply(f3(),4,5,6);

여기에서 결과를 확인하실 수 있습니다

첫 번째 테스트 호출이 올바르게 출력됩니다

두 번째 테스트 호출은 배열로 전달되므로 먼저 배열을 출력한 다음 정의되지 않은 두 개를 출력합니다

테스트 적용의 세 번째 섹션에서는 올바르게 출력됩니다

네 번째 단락에서는 잘못된 매개변수 형식으로 인한 오류를 직접 보고합니다

여기서 차이점은 분명합니다

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