>  기사  >  웹 프론트엔드  >  js 호출 방법 상세 소개(js 상속)_기본지식

js 호출 방법 상세 소개(js 상속)_기본지식

WBOY
WBOY원래의
2016-05-16 17:14:34906검색

호출 메서드

참조 적용 대상: 함수 개체

버전 5.5 필요
개체에 대한 메서드를 호출하여 현재 개체를 다른 개체로 바꿉니다.

call([thisObj[,arg1[, arg2[, [,.argN]]]]])
매개변수
thisObj
선택 사항. 현재 객체로 사용될 객체입니다.
arg1, arg2, , argN
선택 사항. 일련의 메소드 매개변수가 전달됩니다.
설명
call 메소드를 사용하면 다른 객체 대신 메소드를 호출할 수 있습니다. call 메소드는 함수의 객체 컨텍스트를 초기 컨텍스트에서 thisObj가 지정한 새 객체로 변경합니다.

thisObj 매개변수가 제공되지 않으면 전역 개체가 thisObj로 사용됩니다.

---------------------------------- --- ----------------------------------
얼핏 보면 헷갈리기 쉬우니 먼저 간단한 설명부터 하겠습니다.
obj1.method1.call(obj2, 인수1, 인수2)
위와 같이 call의 기능은 메소드를 넣는 것입니다. obj2에 obj1을 저장하고 나중에 인수1을 사용합니다. 이는 매개변수로 전달됩니다.

구체적인 예를 들어보세요

코드 복사 코드는 다음과 같습니다.

함수 add(a ,b)
{
경고(a b);
}
함수 하위(a,b)
{
경고(a-b);
}

add.call(sub,3,1);


이 예의 의미는 sub를 add, add.call(sub,3,1) == add(3 , 1) 따라서 실행 결과는 다음과 같습니다. Alert(4); // 참고: js의 함수는 실제로 객체이고 함수 이름은 Function 객체에 대한 참조입니다.


조금 더 복잡한 예를 보세요

코드 복사 코드는 다음과 같습니다.

function Class1()
{
this.name = "class1";

this.showNam = function()
{
Alert(this.name);
}
}

함수 Class2()
{
this.name = "class2";
}

var c1 = new Class1();
var c2 = new Class2();

c1.showNam.call(c2);


호출은 c2에 c1의 메소드를 넣어 실행한다는 뜻입니다. 원래 c2에는 showNam() 메소드가 없었습니다. c1의 메소드를 넣는 것입니다. showNam() 메소드를 c2에 배치하여 실행하므로 this.name은 class2여야 하며 실행 결과는 다음과 같습니다.alert ("class2"); 재미있다고 생각하시면 객체 a가 객체 b의 메소드를 실행하도록 할 수 있는데, 이는 Java 프로그래머가 감히 생각하지 못하는 것입니다. 더 흥미로운 점은 호출을 사용하여 상속을 구현할 수 있다는 것입니다.


코드 복사 코드는 다음과 같습니다.
function Class1()
{
this.showTxt = function(txt)
{
Alert(txt);
}
}
함수 Class2()

{
Class1.call(this);
}

var c2 = new Class2();

c2.showTxt("cc");


이런 식으로 Class2는 Class1을 상속합니다. Class1.call(this)은 이 객체 대신 Class1 객체를 사용한다는 의미입니다. thing in Class2 Class1의 모든 속성과 메서드, c2 객체는 Class1의 메서드와 속성을 직접 호출할 수 있으며 실행 결과는 다음과 같습니다.
그렇습니다. JavaScript가 객체지향에서 상속을 시뮬레이션하는 방법이며 다중 상속도 구현할 수 있습니다.


function Class10()
{
this .showSub = function(a,b)
{
Alert(a-b);
}
}

function Class11(){

this.showAdd = function(a,b)
{
Alert(a b);
}
}

function Class2()

{
Class10.call(this);
Class11.call(this);
}


매우 간단합니다. , 다중 상속은 두 개의 호출을 사용하여 달성됩니다

물론 프로토타입 체인을 사용하는 등 다른 js 상속 방법도 있습니다. 이는 단지 호출의 사용법을 설명하기 위한 것입니다. >call을 언급했는데 당연히 Apply가 있는데 이 두 메소드는 기본적으로 같은 의미를 가집니다
차이점은 call의 두 번째 매개변수는 어떤 유형이든 될 수 있지만 Apply의 두 번째 매개변수는 배열이어야 한다는 점입니다
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.