我理解如何在带有Node.js和模块的标准Javascript中使用Protoype,但是我在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
我做错了什么?
答案 0 :(得分: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
答案 1 :(得分:0)
更简洁一点:
构造:(@ PARAM) - &GT;
上面的代码将转换为this.param = param