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を実行して、コンソール出力「MynameisEmma」を確認する予定です。代わりに、TypeError:undefined in notafunctionというエラーが発生します。

4

4 に答える 4

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.exportsPerson変数はまだ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 に答える