这与窗口的区别

时间:2015-03-18 04:12:04

标签: coffeescript export

想象一下coffeescript类:

class Batman

  constructor: ->

    alert "Batman is awesome"

我认为这是一个新手问题,但真正的区别是什么:

class @Batman

  constructor: ->

    alert "Batman is awesome"

class window.Batman

  constructor: ->

    alert "Batman is awesome"

1 个答案:

答案 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提供的上下文(例如浏览器,节点实例,数据库)通常不是一个好主意,你应该找到一个更好的实例化代码并将其从模块传递到模块的方法。