javascript - 使用 coffeescript 默认包装器访问文档

标签 javascript coffeescript

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/

相关文章:

javascript - Object.create() 未完全创建;

javascript - 从 DOM 中删除后重新渲染/交换模板

node.js - CoffeeScript 更新未在重新启动时反射(reflect)出来

javascript - 在 Coffeescript 中创建带有可选参数的匿名函数

javascript - 在 Coffeescript 中迭代 ES6 Set/Map(使用 `of` 运算符)

javascript - moment.diff 函数无法正确处理作为字符串传递的日期

javascript - 我们可以将二进制原始数据添加到 <form> 中吗?

javascript - 从评估()中处理提交的响应

node.js - Node 不需要 *.coffee 文件

jquery - 结合 jQuery 函数调用和 if 语句?