Coffeescript 将您的代码包装成类似这样的包装器
(function() {
/* your code */
}).call(this);
在这里,this
表示 window
.所以,为了创建一个公共(public)接口(interface),我做了类似的事情
this.publicObject =
someMethod: ->
document.getElementById("button1").innerHTML = "Changed!"
然后我可以在 HTML 文档中注册一个回调,使用类似 <span onclick="publicObject.someMethod();">Click</span>
的内容调用我的 .js 文件.
但是,如果我想从 .coffee 文件中调用 someMethod 怎么办(我想在文档准备好时调用 编辑:请参阅接受的答案+下面的评论)?如果我只是按照上面的代码跟上
publicObject.someMethod()
由于上下文问题,文档对象似乎无法在 someMethod 中访问。 如何调用publicObject.someMethod()
从我的 .coffee 文件中让它识别 document
?
备注:apply()
和 call()
欺骗是可以的,但如果可能的话,我不想去掉 wrapper 。如果您愿意,我会使用以下内容来编译我的脚本:
coffee -j -p -c coffee/*.coffee > www/app.js
最佳答案
包装器不隐藏 document
,它是全局的,因为它附加到 window
。除非您在 .coffee
文件中声明了一个名为 document
的变量(通过编写 document = ...
),document
可以从 someMethod
访问。尝试将 console.log 文档
添加到 someMethod
的顶部以自行检查。
所以一定有其他事情发生了。调用 someMethod
时收到的错误消息到底是什么?
关于javascript - 使用 coffeescript 默认包装器访问文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6951438/