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引用,那么执行thisdocument必须是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中。

07-26 00:56