2012-05-02 4 views
3

phonegap에 'this'가 무엇입니까? 나는 애플 리케이션 및 원격 자바 스크립트 서버에서 가져온 함께 포장 된 로컬 자바 스크립트가있는 응용 프로그램에서 일하고 있습니다. coffeescript를 사용하여 모든 자바 스크립트를 생성합니다.'this'in phonegap

%script{:src=>"javascripts/file1.js"} 
%script{:src=>"http://192.168.5.205:3000/assets/file2.js"} 

file1.js.coffee :

@myObj1 = property: true 

file2.js.coffee :

두 파일은 같은 HAML을 통해 생성 된 응용 프로그램의 인덱스 헤더에 포함되고있다

@myObj2 = property: true 

myObj1은 전 세계적으로 제공되며 바로로 참조 할 수 있습니다. 0이지만, myObj2document.myObj2을 통해서만 가능하며 간단히 myObj2으로 언급 할 수 없습니다. 무슨 일 이니?

+0

당신의 문제가'=>'not'->'라고 상상해보십시오. '@'는 자동으로'this'의 문맥을 유지합니다. 순수한 자바 스크립트의 경우에는'var self = this; '를''this'' 대신에''self''를 참조하십시오. – asawyer

답변

6

글쎄, 당신이 말할 경우 : file2.js.coffee이 실행될 때

@myObj2 = property: true 

당신은 myObj2 다른 곳에 document.myObj2으로 참조해야 다음 thisdocument해야합니다. 이러한 종류의 일은 코드가 $(document).ready() 또는 유사한 방법 (예 : http://jsfiddle.net/ambiguous/6DFK9/)을 통해 실행되는 경우 발생할 수 있습니다.

당신이 뭔가 글로벌 싶은 경우에, 당신은 정말 그것에 대해 명시하고 window 사용해야합니다

# in file1.js.coffee: 
window.myObj1 = property: true 

# in file2.js.coffee: 
window.myObj2 = property: true 

더 중요한 것은 호출 컨텍스트에 대해 걱정하지 않아도 그런 식으로, 당신의 의도를 명시적일 것이므로 버그를 수정하려고 할 때 this이 6 개월 내에 있어야 할 내용을 모르는 채로 퍼즐을 풀지 않아도됩니다. 무슨 뜻인지 말해보세요 : 글로벌하고 싶다면 window에 입력하십시오.