Javascript 为什么coffescript要创建这个闭包

Javascript 为什么coffescript要创建这个闭包,javascript,coffeescript,Javascript,Coffeescript,我正在学习咖啡脚本我有以下代码: class Person constructor: (@firstName, @lastName) -> sayHi: () -> return "Hi, I'm #{@firstName} #{@lastName}" 正在生成以下javascript代码: // Generated by CoffeeScript 1.10.0 (function() { var Person; Person = (fun

我正在学习咖啡脚本我有以下代码:

class Person
    constructor: (@firstName, @lastName) ->
    sayHi: () ->
        return "Hi, I'm #{@firstName} #{@lastName}"
正在生成以下javascript代码:

// Generated by CoffeeScript 1.10.0
(function() {
  var Person;

  Person = (function() {
    function Person(firstName, lastName) {
      this.firstName = firstName;
      this.lastName = lastName;
    }

    Person.prototype.sayHi = function() {
      return "Hi, I'm " + this.firstName + " " + this.lastName;
    };

    return Person;

  })();

}).call(this);

我想创建该
类的实例,但由于它在闭包中,我无法确定该如何创建它?

更改一个类的声明

class window.Person
  constructor: (@firstName, @lastName) ->
  sayHi: () ->
    return "Hi, I'm #{@firstName} #{@lastName}"

稍微不那么粗俗的一个选项是
@
操作符(与
this
相同)。在浏览器环境中,
将指向
窗口
,在
节点.js
中,它将指向
导出

class @Person
  constructor: (@firstName, @lastName) ->
  sayHi: () ->
    return "Hi, I'm #{@firstName} #{@lastName}"
窗口。Person
仅在浏览器上工作,
@
将在节点和浏览器上工作。看


或者,您可以使用
-b
(-bare)
选项运行coffescript,并且不会创建包装函数。

这是在
咖啡中运行coffescript的正确方法吗?
?您应该提到您正在使用
节点.js
?我没有使用
节点
。只是
npm
用于安装一些软件包,但现在它只是前端应用程序。我想在此基础上运行jasmine测试,但当我
需要
js文件时,Person未定义,因为它在关闭中