2012-04-08 8 views
0

標準のJavascriptでNode.jsとモジュールを使ってProtoypeを使用する方法を理解していますが、CoffeeScriptでそれらを同じ時間にしています。Node.js + CoffeeScript - modules/class confusion

のは、私は、ファイルがmymodule.coffeeと呼ばれているとしましょう:

Module = {} 

class MyModule 

    constructor: (parameter) -> 

    Module = this 
    Module.parameter = parameter 

    standardFunction = (parameter) -> 

    return parameter 

    callbackFunction = (parameter, callback) -> 

    callback parameter 

exports.MyModule = MyModule 

そして私は、私はcoffee test.coffee経由で実行し、同じディレクトリにあるtest.coffeeと呼ばれる別のファイルを、持っていますが、クラスMyModuleにアクセスしようとすると、エラーTypeError: Object #<MyModule> has no method 'standardFunction'を取得します:

myModule = require 'mymodule' 
myModule = new myModule.MyModule 'parameter' 

console.log myModule.standardFunction 'parameter' 

myModule.callbackFunction 'parameter', (response) -> 

    console.log 'Response: ' + response 

私は間違っていますか?

答えて

2

あなたは構文に誤りがあります。

standardFunction = (parameter) -> 
    return parameter 

は、最初のものは、あなたに何も与えない

standardFunction = function(parameter) { 
    return parameter; 
} 

に変換され

standardFunction : (parameter) -> 
    return parameter 

:の代わり=)でなければなりません(クラスとの関係はありません)、2番目のクラスは

MyModule.prototype.standardFunction = function(parameter) { 
    return parameter; 
} 

これはあなたが望むものです。

ところで、あなたはこのようなあなたのコンストラクタでのCoffeeScriptを使用することができます。

constructor: (parameter) -> 
    @parameter = parameter 
+0

右。また、コンストラクタで@parameter =パラメータをスキップすることもできますが、渡されたすべてのパラメータが@(this)に自動的に代入されるため、http://parffeescript.org/ – drinchev

+0

のオンラインパーサを参照してくださいCoffeeScriptを使用してコンストラクタにプロパティを追加することができます: 'constructor:(@parameter) - >' –

0

をもう少し簡潔にするためには:

コンストラクタ:(パラメータ@) - >

上記のコードはthis.param = paramに翻訳されます