2010-02-14 2 views
3

에서 참조 무엇 :이 다음과 같은 코드를 사용하여 자바 스크립트 개인 방법

function Node(){ 
.... 
function foo(request){ 
     for (var name in this) { 
      log(name +" is "+this[name]); 
      if(!(name == 'all' || typeof this[name] == 'function')){ 
       request[name] = this[name]; 
      } 
     } 
     return ... 
    }; 
} 

나는 (민간 기능 foo가 호출 될 때 this가 포함 된 개체를 참조하지 않는 것에 놀랐다 Node의 인스턴스). 왜 그런가요? 물론

내가 좋아하는 뭔가를 할 수 :

function Node(){ 
     var ref = this; 
     .... 
} 

foothisref를 사용하지만, this가 포함 된 객체에 대한 참조가있는 민간 방법을 선언하는 방법은 무엇입니까?

답변

1

'this'는 함수를 호출하는 데 사용되는 개체를 나타내며, 기본적으로 'window'입니다.

foo에서 'this'가 foo라는 'this'를 참조하도록 foo.apply (this, ...) 또는 foo.call (this, ...)을 사용하여 foo를 호출하십시오.

내가 사용하는 규칙은 (.apply 방지하고 .call하는)입니다 :

var me = this; 

function foo() 
{ 
    // use 'me' 
} 

이 BTW, '나'는 '이'VB.NET에 대한 키워드입니다.

+0

"this는 함수를 호출하는 데 사용 된 객체를 참조하지만 Node의 public 함수에서 foo를 호출했습니다. this.publicFoo = function() {... foo(); ...};) . 어떻게 이것이 아직도 창문을 가리키는가? 환호 –

+0

'this'는 '.'왼쪽의 개체를 나타냅니다. 메소드가 호출 될 때. 하지만 "."없이 전화하면 (예 : foo();)는 window.foo()를 의미합니다. 정의 된 위치는 문제가되지 않지만 호출 방법은 중요합니다. –

0

'this'의 구현이 올바르지 않지만 모든 혼란과 문제 해결 방법으로 이어지는 '고정'되지 않았습니다.

귀하의 var ref=this;은 공개/특권 회원에 사용하기 위해 귀하의 개체에 대한 참조를 유지하는 방법입니다. Douglas Crockford (google it)는 var that=this;을 사용합니다.

관련 문제