2010-06-26 4 views
4

존 레식의 간단한 자바 스크립트 상속 사용에 도움이 필요하십니까 : 나는 그런 일하려고 노력 http://ejohn.org/blog/simple-javascript-inheritance/는 존 레식의 간단한 자바 스크립트 상속

:

var SomeClass = Class.extend({ 
    init: function() { 
     var someFunction = function() { 
      alert(this.someVariable); 
     }; 

     someFunction(); // should alert "someString" 
    }, 

    someVariable: "SomeString" 
}); 

var someClass = new SomeClass(); 
이 "someString"을 경고해야

을하지만, 그렇지 않은 내부 때문에 closure 함수 someFunction, 의 값은 클래스를 참조하지 않고 변경됩니다. 그 때문에 closure 함수 내에서 클래스의 속성과 함수에 액세스 할 수 없습니다.

의견이 있으십니까?

+1

난 몰라 존 레미 그 태그가 필요하다고 생각해! –

답변

6

귀하의 문제는 "this"가 언급 한 내용에 달려 있다고 생각합니다. "this"는 객체가 아닌이 경우의 함수를 나타냅니다. 당신이 원하는 것은 아마도 :

var SomeClass = Class.extend({ 
    init: function() { 
     var self = this; 
     var someFunction = function() { 
      alert(self.someVariable); 
     }; 

     someFunction(); // should alert "someString" 
    }, 

    someVariable: "SomeString" 
}); 

var someClass = new SomeClass(); 

매우 늦게 편집 : 참고 사항 :

+1

그건 내가 실제로 사용하는 것이지만 다른 방법을 검색하기 때문에 여기에 왔습니다. 이 방법을 사용하면 ** var self = this; ** 페이지에서 20 번 같은 것을 쓸 수 있습니다. \ –

+0

다음과 같이 할 수 있습니다. http://www.sitecrafting.com/blog/underscore-trick –

+0

그것을 시도, 감사합니다 =] –