我正在研究一个简单的例子;我可以使用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。
答案 0 :(得分:27)
将module.exports
行放在底部。
---- ---- person.coffee
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
时,Person
变量仍为undefined
。
答案 1 :(得分:15)
你也可以写person.coffee
:
class @Person
然后在index.coffee
中使用以下内容:
{Person} = require './person'
答案 2 :(得分: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'
答案 3 :(得分:2)
这里的各种答案似乎理所当然地认为模块导出的唯一一个对象是类(“Java思维方式”)
如果你需要导出几个对象(类,函数等),最好写一下:
exports.Person = class Person
[...]
coffee> { Person } = require "./person"
coffee> p = new Person "Emma"