19

我正在研究一个简单的例子;我可以让它与 Javascript 一起工作,但我的 CoffeeScript 版本有问题。

这是person.coffee:

module.exports = Person

class Person 
    constructor: (@name) ->

    talk: ->
        console.log "My name is #{@name}"

这里是 index.coffee:

Person = require "./person"
emma = new Person "Emma"
emma.talk()

我期待运行 index.coffee 并看到控制台输出“我的名字是 Emma”。相反,我收到一条错误消息 TypeError: undefined in not a function。

4

4 回答 4

27

module.exports线放在底部。

----人.咖啡----

class Person 
    constructor: (@name) ->

    talk: ->
        console.log "My name is #{@name}"

module.exports = Person

Person = require "./person" // [Function: Person]
p = new Person "Emma" // { name: 'Emma' }

当您module.exports在顶部分配 to 时,Person变量仍然是undefined.

于 2012-09-07T00:16:31.663 回答
16

你也可以写person.coffee

class @Person

然后在中使用以下内容index.coffee

{Person} = require './person'
于 2013-04-08T01:56:16.293 回答
5

你也可以写

module.exports = class Person
  constructor: (@name) ->
    console.log "#{@name} is a person"   

然后在index.coffee任一

bob = new require './person' 'Bob'

或者你可以这样做

Person = require './person'
bob = new Person 'bob'
于 2013-11-12T14:10:35.960 回答
2

这里的各种答案似乎理所当然地认为模块导出的唯一一个对象是类(一种“Java思维方式”)

如果您需要导出多个对象(类、函数等),最好这样编写:

exports.Person = class Person
    [...]


coffee> { Person } = require "./person"
coffee> p = new Person "Emma"
于 2014-08-03T22:43:48.743 回答