2012-02-19 4 views
0
var a = function(){ 

    this.x = function(){alert('apple');} 
    this.y = function(callback){ 
     if(typeof callback == 'undefined' || callback == null) 
      alert('argh') 
     else 
      callback(); 
    } 
} 
var foo = function(){alert('blah')}; 
var x = new a(); 
x.y(this.x); // why is this one undefined 
x.y(foo); // works as expected 

여기 jsfiddle 링크입니다 : http://jsfiddle.net/W7FyZ/2/개체 멤버 함수의 콜백? (자바 스크립트)

가 왜 객체의 멤버 함수에 전달할 때이 정의되지는? 객체 멤버 함수를 콜백으로 전달하는 방법이 있습니까?

답변

0

혼란을 없애기 위해 변수의 이름을 변경했습니다.

var a = function(){ 
    this.x = function(){alert('apple');} 
    this.y = function(callback){ 
     if(typeof callback == 'undefined' || callback == null) 
      alert('argh') 
     else 
      callback(); 
    } 
} 
var foo = function(){alert('blah')}; 

지금, 실행 부에서 : 선 위에

var myA = new a(); 

는 할당 함수 A() 변수 'MYA'이다. 따라서 및 y()a() 인 경우 myA.x()myA.y()이라고해야합니다.

x.y(myA.x); // it works 
x.y(this.myA.x) // This also works as this is a current window 
x.y(foo); // works as expected 
4

x.y(this.x)을 입력 할 때 this은이 창에 대한 참조이며 a이 아닙니다. 나는 무엇을 의도 한 수하는 생각 : x 이후

x.y(x.x); 

a의 인스턴스이며,이 a의이 인스턴스의 y 방법 a의이 인스턴스의 x 방법에 대한 참조를 전달합니다. 만약 x.y(foo) 할 때

foo이 범위에서 선언 함수 있으므로 xy 방법에 foo 함수에 대한 참조를 전달한다.

+0

흠, 흥미,하지만 난 내에서이 때 x는 도장 모듈, 크롬의 목적은 도장이 필요 Uncaught TypeError : 정의되지 않은 – Derek

+0

@Derek의 'func'메서드를 호출 할 수 없음 - 질문을 더 명확히해야합니다. 아마도 코드가 더 필요합니다. 나는 네가 무슨 뜻인지 완전히 모르겠다. –