1. 메소드 정의
통화 방법 :
구문 : call ([thisobj [, arg1 [, arg2 [, .Argn]]]])))
정의 : 현재 객체를 다른 객체로 바꾸려면 객체의 메소드를 호출하십시오.
설명 :
호출 방법을 사용하여 다른 객체 대신 메소드를 호출 할 수 있습니다. 호출 메소드는 기능의 객체 컨텍스트를 초기 컨텍스트에서 thisobj가 지정한 새 개체로 변경합니다.
thisobj 매개 변수가 제공되지 않으면 글로벌 객체는 thisobj로 사용됩니다.
방법 적용 :
구문 : apply ([thisobj [, argarray]])
정의 : 특정 객체의 하나의 메소드를 적용하고 현재 객체를 다른 객체로 바꾸십시오.
설명 :
Argarray가 유효한 배열이 아니거나 인수 객체가 아닌 경우 TypeError가 생성됩니다.
인수가 제공되지 않으면 글로벌 객체는 thisobj로 사용되며 인수를 전달할 수 없습니다.
2. 일반적인 예
에이.
코드 사본은 다음과 같습니다.
함수 추가 (a, b)
{
경고 (A+B);
}
기능 하위 (A, B)
{
경고 (AB);
}
add.call (서브, 3,1);
이 예제의 의미는 sub를 add, add.call (sub, 3,1) == add (3,1)로 바꾸는 것입니다. 실행 결과는 다음과 같습니다. Alert (4); // 참고 : JS의 함수는 실제로 객체이며 함수 이름은 함수 객체에 대한 참조입니다.
비.
코드 사본은 다음과 같습니다.
기능 동물 () {
this.name = "동물";
this.howname = function () {
경고 (this.name);
}
}
기능 cat () {
this.name = "고양이";
}
var 동물 = 새로운 동물 ();
var cat = new cat ();
// 호출 또는 적용 메소드를 통해 원래 동물 객체에 속하는 showingame () 메소드는 사용하기 위해 객체 고양이에 양도됩니다.
// 입력 결과는 "고양이"입니다.
Animal.howname.call (Cat, ",");
//animal.howname.apply (Cat, []);
전화는 동물 방법을 고양이에 넣는 것을 의미합니다. 고양이는 showame () 메소드가 없다는 것이 밝혀졌습니다. 이제, 동물 showingame () 메소드를 고양이에 실행할 수 있도록하는 동물을 넣으십시오.
기음. 상속을 실현하십시오
코드 사본은 다음과 같습니다.
기능 동물 (이름) {
this.name = 이름;
this.howname = function () {
경고 (this.name);
}
}
기능 고양이 (이름) {
Animal.call (this, name);
}
var cat = 새로운 고양이 ( "검은 고양이");
cat.howname ();
Animal.call (this) 은이 물체 대신 동물 대상을 사용하는 것을 의미합니다. 그렇다면 고양이에 동물의 모든 특성과 방법이 없습니까? CAT 물체는 동물 방법과 특성을 직접 호출 할 수 있습니다.
디. 다중 상속
코드 사본은 다음과 같습니다.
함수 class10 ()
{
this.showsub = function (a, b)
{
경고 (AB);
}
}
함수 class11 ()
{
this.showadd = function (a, b)
{
경고 (A+B);
}
}
함수 class2 ()
{
클래스 10.call (this);
클래스 11.call (this);
}
두 번의 호출을 사용하여 여러 상속을 달성하는 것은 매우 간단합니다.
물론, 프로토 타입 체인 사용과 같은 JS를 상속하는 다른 방법이 있으며,이 기사의 범위에 속하지 않고 여기에서 통화 사용 만 설명합니다. 전화에 대해 말하면 물론 적용됩니다. 이 두 가지 방법은 기본적으로 같은 것을 의미합니다. 차이점은 호출의 두 번째 매개 변수가 모든 유형 일 수 있고, 제작의 두 번째 매개 변수는 배열 또는 인수 여야한다는 것입니다.
그리고 칼리, 발신자 ..
요약 :
간단히 말하면 : 유사성 : 두 방법의 효과는 정확히 동일합니다.
다른 점 : 메소드가 전달되는 매개 변수는 다릅니다.