好的,所以在阅读了那篇文章后,我抓住了命名空间函数并将其放入自己的文件中。
namespace.coffee
namespace = (target, name, block) ->
[target, name, block] = [(if typeof exports isnt 'undefined' then exports else window), arguments...] if arguments.length < 3
top = target
target = target[item] or= {} for item in name.split '.'
block target, top
console.log "created namespace "+ name
root = exports ? window
root.namespace = namespace
然后在 Repl 中:
> namespace = require('./assets/js/namespace.js').namespace
[Function]
如果我 toString() 它是正确的。
好的,所以现在我想使用它:(ns.coffee
来自 Sandro 的回答)
namespace = require('./namespace.js').namespace
class MyFirstClass
myFunc: () ->
console.log 'works'
class MySecondClass
constructor: (@options = {}) ->
myFunc: () ->
console.log 'works too'
console.log @options
namespace "Project.Something", (exports) ->
exports.MyFirstClass = MyFirstClass
exports.MySecondClass = MySecondClass
console.log 'done with exports'
然后我在 Repl 中运行它:
ns = require('./assets/js/ns.js') # 编译后的 ns.coffee
使用导出
创建的命名空间 Project.Something
{}
它似乎不起作用:
> ns.MyFirstClass
undefined
> ns.MySecondClass
undefined
> ns.Project.Something.MySecondClass
TypeError: Cannot read property 'Something' of undefined
我在这里做错了吗?