호출 메소드
참조 적용 대상: 함수 객체
버전 5.5 필요
객체에 대해 메소드를 호출하여 현재 객체를 다른 객체로 바꿉니다.
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
매개변수
thisObj
선택 사항. 현재 객체로 사용될 객체입니다.
arg1, arg2, , argN
선택 사항. 일련의 메소드 매개변수가 전달됩니다.
설명
call 메서드는 다른 개체 대신 메서드를 호출하는 데 사용할 수 있습니다. call 메소드는 함수의 객체 컨텍스트를 초기 컨텍스트에서 thisObj가 지정한 새 객체로 변경합니다.
thisObj 매개변수가 제공되지 않으면 전역 개체가 thisObj로 사용됩니다.
---------------------------------- --- ----------------------------------
얼핏 보면 헷갈리기 쉬우니 먼저 간단한 설명부터 하겠습니다
obj1.method1.call(obj2,argument1,argument2)
위와 같이 call의 기능은 메소드를 넣는 것입니다. obj2에 obj1을 저장하고 나중에 인수1을 사용합니다. 이는 매개변수로 전달됩니다.
구체적인 예를 들어보세요
함수 add(a ,b)
{
alert(a b)
}
function sub(a,b)
{
alert(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); >}
}
function Class2()
{
this.name = "class2";
}
var c1 = new Class1()
var c2 = new Class2();
c1.showNam.call(c2);
호출은 c2에 c1의 메소드를 넣어서 실행한다는 뜻입니다. 이제 c1의 메소드를 넣는 것입니다. showNam() 메소드는 실행을 위해 c2에 배치되므로 this.name은 class2여야 하며 실행 결과는 다음과 같습니다. 흥미롭다고 생각하면 a 객체가 b 객체를 실행하도록 할 수 있습니다. 이 방법은 Java 프로그래머가 감히 생각하지 못하는 것입니다. 더 흥미로운 점은 호출을 사용하여 상속을 구현할 수 있다는 것입니다.
{
this.showTxt = function(txt)
{
alert(txt)
}
}
function Class2()
{
Class1.call(this);
}
var c2 = new Class2()
c2.showTxt("cc")
이렇게 하면 Class2가 Class1을 상속하고, Class1.call(this)은 이 객체 대신 Class1 객체를 사용한다는 의미이며, Class2는 Class1의 모든 속성과 메서드를 가지지 않으며, c2 객체는 Class1의 메서드와 속성을 직접 호출할 수 있습니다. 실행 결과는 다음과 같습니다. 경고("cc")
예, 이것이 바로 javaScript가 객체 지향에서 상속을 시뮬레이션하는 방법이며 다중 상속도 구현할 수 있습니다.
{
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의 사용법을 설명하기 위한 것입니다
제가 call을 언급했는데, 물론 이 두 가지 방법은 기본적으로 같은 의미입니다
차이점은 다음과 같습니다. call의 두 번째 매개변수는 임의의 유형이 될 수 있고 Apply의 두 번째 매개변수는 배열이어야 하며
인수가 될 수 있으며 이는 call의 사용법과 다릅니다. 다음에는, 하하.