2016-01-21 53 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