먼저 Call ()에 대한 공식 설명을 살펴보고 "객체의 한 메소드를 호출하고 현재 객체를 다른 객체로 바꾸는 것"을 살펴 보겠습니다. 이 설명을 읽은 후에는 더 혼란 스러울 수 있습니다. See example:
코드 사본은 다음과 같습니다.
var x = "나는 글로벌 변수입니다"; // 글로벌 변수 정의 x
함수 a () {// 함수 클래스 구조 정의 a
this.x = "나는 함수 클래스 구조 a에서 그것을 선언했다";
}
// 정상 함수를 정의하고 현재 포인터에 포함 된 변수 X의 값을 나타냅니다.
함수 f () {
경고 (this.x);
}
// 리턴 값은 "기능 클래스 구조 a에서 선언 됨"입니다.
f.call (new a ());
내 이해는 f.call (new a ())가 구문 분석을 위해 호출 된 객체 "new a ()"에 함수 (실제로 객체) f를 복사하는 것입니다. 실제로 다음 코드의 구문 분석 결과와 동일합니다.
코드 사본은 다음과 같습니다.
기능 a () {
this.x = "나는 함수 클래스 구조 a에서 그것을 선언했다";
경고 (this.x);
}
에이();
현재 변수 X의 범위가 다릅니다. 예 ... 약간의 상속이있는 것 같습니다. 그렇지 않습니까? 상기 예에서, f는 생성자 a의 강도 대상에 의해 완전히 상속된다. A.Call (B)가 상속 모드임을 보여주기에 충분하지 않으면 더 상속 된 사용법을 살펴 보겠습니다.
코드 사본은 다음과 같습니다.
함수 f () {
this.a = "a";
this.b = function () {
경고 ( "B");
}
}
함수 e () {
f.call (this);
}
var c = new e ();
경고 (ca); // popt a
cb (); // 팝트 b
이 예에서는 브라우저 사용 방법을 알고있는 친구 인 한 e가 F의 속성과 방법을 완전히 상속하는 것을 볼 수 있습니다. 그렇지 않으면 속성 A와 B가 e에 정의되지 않기 때문에 설명되지 않습니다. 그런 다음 상식에 따라이 두 속성은 e의 인스턴스 객체 C에 나타나지 않습니다.