想象一下coffeescript类:
class Batman
constructor: ->
alert "Batman is awesome"
我认为这是一个新手问题,但真正的区别是什么:
class @Batman
constructor: ->
alert "Batman is awesome"
和
class window.Batman
constructor: ->
alert "Batman is awesome"
答案 0 :(得分:1)
使用' -c'编译您的咖啡。争论,看看你得到了什么:
(function() {
/// Your code here
}).call(this);
this
有函数包装器的上下文被调用,并成为coffeescript模块中的this
对象。
在浏览器的上下文中,您的模块使用全局this = window
初始化;在Node或IoJS的上下文中,this = global
,执行的全局上下文;在plv8,this = role
的上下文中,包含安全信息的每执行对象(因为plv8基本上是在SQL服务器内运行的节点,所以这很重要)。
class window.Batman
将您的Batman类显式附加到窗口对象(这意味着您不再具有可以在任何地方使用的同构代码); class @Batman
将它附加到本地环境中,这可以是,无论你想要什么。
总而言之,作为最佳实践,将内容附加到VM提供的上下文(例如浏览器,节点实例,数据库)通常不是一个好主意,你应该找到一个更好的实例化代码并将其从模块传递到模块的方法。