2010-01-29 2 views
5

기본적으로 JavaScript에서 'this'키워드의 작동 원리를 이해하고 배우려고합니다.'this'키워드는 다른 함수 안에있는 함수 내의 어떤 객체를 참조합니까?

내가 아는 한 'this'는 그 순간 안에있는 객체 (기능)를 의미합니다.

그래서,이 믿음으로, 나는 아래의 간단한 코드의 출력 테스트하고 싶었 :

<body> 

<input type="button" value="Add Age" onclick="Outer()" /> 

<script type="text/javascript"> 

function Outer(){ 

if(typeof this.Father == 'undefined') 
    { 
     this.Father = 0; 
    } 

this.Father+=2; 
alert(this.Father); 

inner(); 

     function inner(){ 
      if(typeof this.Son== 'undefined') 
      { 
       this.Son = 0; 
      }; 

      this.Son++; 
      alert(this.Son); 
      alert(this.Father); 
     }; 
}; 
</script> 
</body> 

을 그리고 출력은 나를 혼란. inner() 함수에서 this.Son은 아들의 증가 된 정수 값을 출력하기 때문입니다. 하지만 inner()가 .Father 특성을 가지고 있지 않기 때문에 Father가 실패 할 것으로 기대한다. 대신에 예외를 던지는는 this.Father - 어떤 값이

  • '이'내부()
  • 하고 다음 라인 '이'()
아우터 의미를 지칭 상기 광고 보인다 알림

  1. 합니까 '이'키워드도 내부 함수 내부 에 항상 외부 범위의 주택을 말한다 :이 시점에서

    나는 actualy 내 마음에서이 개 질문이?

  2. 'this'키워드는 메소드에서 무엇을 참조하는지 선언하지 않고 있습니까?

감사합니다,

답변

5

this가 호출 패턴에 의해 결정된다

부락의 ozdogan (나는 var myFamily = new Outer() 사장님 뭔가를하지 않고 의미), 즉, 함수 객체가 어떻게 호출되고있다. 즉, .이다 기능 일부 객체의 속성으로 정의되고, 정제를 사용하여 객체를 통해 호출된다

  1. 메소드 호출 :

    는 호출 패턴의 4 종류가있다.

    a.func(); // this은 개체, 즉 a을 참조합니다.

  2. 함수 호출 : 일반 함수 호출.

    func(); // this은 전역 개체에 대한 연결입니다.

  3. constuctor 호출 : 음, 다소 복잡합니다. 생성자는 new 인 새 함수 객체에 대한 생성자 메서드로 사용되므로 this은 생성중인 새 함수 객체를 참조합니다.

    var func = new Func(); // this

  4. 가 호출 신청) Func 생성자 func 동안을 말한다 : (thisArg, argArray) func.apply

    단계; // this는 첫 번째 인수

다른 말로

, 모두가 글로벌 객체를 참조하여 예에서 this (당신의 onClick 전화 Other())에 결합한다. 대신 new Other()을 사용해보세요.

+0

감사합니다. 정말 유용한 정보입니다. 이 기사에서 호출 패턴에 대한 자세한 내용을 확인할 수 있습니다. http://mcarthurgfx.com/blog/article/4-ways-functions-mess-with-this – pencilCake

+0

또한이 설명도 매우 유용합니다. 자바 스크립트 - 문맥 재검토 - http://msmvps.com/blogs/luisabreu/archive/2009/08/24/function-invocation-in-javascript-contexts-revisited.aspx – pencilCake

관련 문제