>  기사  >  웹 프론트엔드  >  자바스크립트 스터디노트(9) 메소드 호출 및 적용_기본지식

자바스크립트 스터디노트(9) 메소드 호출 및 적용_기본지식

WBOY
WBOY원래의
2016-05-16 18:36:45695검색
호출 및 적용 메서드
호출 메서드는 이 포인터의 컨텍스트를 변경할 수 있습니다. 유사한 메서드에는 현재 this 인스턴스 포인터를 일관되게 유지하기 위해 js 개체의 다양한 메서드가 서로 호출할 때 주로 사용되는 적용이 포함됩니다. 또는 특별한 경우에는 this 포인터를 변경해야 합니다. 구체적인 예를 들어보세요


함수 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여야 하며 실행 결과는 다음과 같습니다. 호출을 사용하여 상속을 구현할 수 있습니다



코드 복사 코드는 다음과 같습니다. function Class1 () {
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의 메소드와 속성을 직접 호출할 수 있습니다. : Alert ("cc");
이것은 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);
}



1.call 메소드

객체의 메소드를 호출하여 현재 객체를 다른 객체로 대체합니다. call([thisObj[,arg1[, arg2[, [,.argN]]]]])
매개변수
thisObj는 선택 사항입니다. 현재 객체로 사용될 객체입니다.
arg1, arg2, , argN은 선택 사항입니다. 일련의 메소드 매개변수가 전달됩니다.

2.메소드 적용

특정 객체의 메소드를 적용하고 현재 객체를 다른 객체로 교체합니다. apply([thisObj[,argArray]])
매개변수
thisObj 선택 사항입니다. 현재 객체로 사용될 객체입니다.
argArray 선택사항. 이 함수에 전달될 인수 배열입니다.


둘의 차이점
:
둘이 구현하는 기능은 완전히 동일하지만, Call은 각 매개변수를 쉼표(,)로 구분합니다. 그리고 적용은 모든 매개변수를 배열로 전달하는 것입니다.
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.