2016-01-21 52 views
2

我学习的CoffeeScript我有这样的代码:为什么coffescript创建这个封闭

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的实例,但因为它在关闭内部我不知道该怎么做?

+0

你应该提到你正在使用'node.js'? –

+0

我没有使用'node'。只是'npm'用于安装一些软件包,但它现在只是前端应用程序 – Pablo

+0

我想对此运行jasmine测试,但是当我需要js文件时,Person是未定义的,因为它在关闭中 – Pablo

回答

1

一个选项即略少的hackish是@操作者(其是相同this)的位声明。在浏览器环境中,this将指向window,在node.js中,它会指向exports

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

window.Person只能在浏览器中,@会为节点和浏览器。请参阅https://stackoverflow.com/a/24352630/227299

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

0

变化一类

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

这是使它在'咖啡'中工作的正确方法吗? – Pablo