phonegap中的“this”是什么?我正在开发一个应用程序,在该应用程序中我打包了本地javascript,并从服务器提取了远程javascript。我正在使用coffeescript生成所有javascript。
这两个文件都包含在应用程序的索引头中,该索引头是通过haml生成的,如下所示:
%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:
@myObj2 = property: true
myObj1
在全局范围内可用,可以仅作为myObj1
进行引用,但是myObj2
仅可通过document.myObj2
进行使用,不能仅作为myObj2
进行引用。怎么了? 最佳答案
好吧,如果你这样说:
@myObj2 = property: true
并且您必须在其他任何地方都将
myObj2
作为document.myObj2
引用,那么执行this
时document
必须是file2.js.coffee
。如果您的代码是通过$(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
感到困惑。说出您的意思:如果要全局使用,请将其放在window
中。