2011-09-01 2 views
8

자바 스크립트에서 '전화'에 대한 질문이 있습니다.'전화 걸기'는 자바 스크립트에서 어떻게 작동합니까?

var humanWithHand = function(){ 
    this.raiseHand = function(){ 
     alert("raise hand"); 
    } 
} 

var humanWithFoot = function(){ 
    this.raiseFoot = function(){ 
     alert("raise foot"); 
    } 
} 

var human = function(){ 

    humanWithHand.call(this); 
    humanWithFoot.call(this); 

} 

var test = new human(); 

so .. 내가 '전화'를 humanWithHand.call (this)로 사용하면 내부적으로 어떤 일이 발생합니까?

humanWithHand는 변수와 구성원을 인간 변수의 프로토 타입에 복사 (또는 가리킨다)합니까?

+0

[MDN 문서 호출()] (https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call) – epascarello

답변

7

.call()this 값을 설정 한 다음 .call()에 전달 된 인수를 사용하여 함수를 호출합니다. 호출 된 함수 내에 this 값을 설정하려고 할 때 함수를 직접 호출하는 대신 .call()을 사용하는 것이 일반적으로 설정된 자바 스크립트로 설정되도록하지는 않습니다.

.apply()은 자매 기능입니다. 또한 this 값을 설정할 수 있으며 배열에서 인수를 사용할 수 있으므로 다른 함수 호출에서 가변 인수 목록을 전달하려고하거나 프로그래밍 방식으로 다른 숫자를 가질 수있는 인수 목록을 구성 할 때 사용할 수 있습니다 상황에 따라 논쟁이있다.

9

예후 다 카츠 (Yehuda Katz)는 JavaScript의 Function#call 방법 중 a good writeup입니다. 그의 글은 귀하의 질문에 답을하고, 많은 다른 후속 질문을해야합니다.

는 일반 구문을 사용하여, 직접 함수를 호출

:

var foo = function() { 
    console.log("foo"); 
    return this; 
}; 
foo(); // evaluates to `window` 

그런 this 함수 호출 내부 함수 호출 밖에있는 어떤 this이다. 기본적으로 브라우저에서 this은 함수 호출 외부에 window입니다. 위의 함수 호출에서 this도 기본값은 window입니다.

에는 메소드 호출 구문을 이용하여 함수를 호출하는 경우 :

var bar = { 
    foo: function() { 
    console.log("foo"); 
    return this; 
    } 
}; 
bar.foo(); // evaluates to `bar` 
이어서

함수 호출 내부 this 가장 오른쪽 기간의 왼쪽에 목적이 경우, bar하여.

call을 사용하여이 상황을 시뮬레이션 할 수 있습니다.

하면 객체 외부의 기능을 설정하고 객체에 설정 함수 호출 내부 this로를 호출 할 때 수행 할 수 있습니다 : 당신은뿐만 아니라 인수를 전달하기 위해이 기술을 사용할 수 있습니다

var foo = function() { 
    console.log("foo"); 
    return this; 
} 
var bar = { }; 
foo.call(bar); // evaluates to `bar` 

:

var foo = function(arg1, arg2) { 
    console.log("foo"); 
    return arg1 + arg2; 
} 
var bar = { }; 
foo.call(bar, "abc", "xyz"); // evaluates to `"abcxyz"` 
+0

큰 설명 –