2012-04-08 3 views
0

Я понимаю, как использовать Protoype в стандартном Javascript с Node.js и модулями, но я имею грубое время, приравнивая их к CoffeeScript.Node.js + CoffeeScript - модули/смешение классов

Скажем, у меня есть файл с именем mymodule.coffee:

Module = {} 

class MyModule 

    constructor: (parameter) -> 

    Module = this 
    Module.parameter = parameter 

    standardFunction = (parameter) -> 

    return parameter 

    callbackFunction = (parameter, callback) -> 

    callback parameter 

exports.MyModule = MyModule 

И у меня есть еще один файл с именем test.coffee в том же каталоге, что я бегу через coffee test.coffee, но получаю сообщение об ошибке TypeError: Object #<MyModule> has no method 'standardFunction' при попытке получить доступ к классу MyModule :

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 : (parameter) -> 
    return parameter 

(: вместо =) Первый преобразуется в

standardFunction = function(parameter) { 
    return parameter; 
} 

, который не дает вам ничего (нет отношения к классу), а второй -

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

Это то, что вы хотите.

Кстати, вы можете использовать CoffeeScript в конструкторе, как это:

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

Право. Кроме того, пока я знаю, вы даже можете пропустить параметр @parameter = в своем конструкторе, потому что все переданные там параметры будут автоматически назначены @ (это) ... см. Онлайн-парсер на http://coffeescript.org/ – drinchev

+0

Вы можете добавить свойство права в конструкторе с помощью CoffeeScript: 'constructor: (@parameter) ->' –

0

Просто чтобы быть немного более кратким:

конструктор: (@ парам) ->

выше код переведёт на это.param = param

Смежные вопросы