Javascript 将@分配给一个单独的对象,以便于命名空间
在coffeescript中,可以通过在定义前面加上Javascript 将@分配给一个单独的对象,以便于命名空间,javascript,namespaces,coffeescript,Javascript,Namespaces,Coffeescript,在coffeescript中,可以通过在定义前面加上@符号,将对象或类指定给全局命名空间 e、 g 但是有没有办法将@符号指定给另一个对象,而不是窗口 当我尝试@={}时,我得到了错误:意外= 这将允许您始终将对象定义为名称空间,但在以后更改您对名称空间的看法。它允许您避免逐案导出。您可以在测试时将@设置为全局,然后在部署时将其设置为备用命名空间 如果有更好的方法或替代方法来实现类似的目标,那也太好了 您不能将某些内容分配给此,此是范围变量 我想您可以使用一些函数来设置名称空间: @scope
@
符号,将对象或类指定给全局命名空间
e、 g
但是有没有办法将@
符号指定给另一个对象,而不是窗口
当我尝试@={}
时,我得到了错误:意外=
这将允许您始终将对象定义为名称空间,但在以后更改您对名称空间的看法。它允许您避免逐案导出。您可以在测试时将@设置为全局,然后在部署时将其设置为备用命名空间
如果有更好的方法或替代方法来实现类似的目标,那也太好了 您不能将某些内容分配给
此
,此
是范围变量
我想您可以使用一些函数来设置名称空间:
@scope = do ( -> return @ ) #change `@` at the end to your namespace
然后你会做:
class @scope.Dog
constructor: () ->
...
解析为:
this.scope = (function() {
return this;
})();
this.scope.Dog = (function() {
function Dog() {
...
}
return Dog;
})();
您不能在顶层更改
此
,但可以使用不同的此
范围:
(->
class @Dog
talk: -> console.log 'woof!'
class @Cat
talk: -> console.log 'meow'
).call animals = {}
# Now the animals "namespace" has a Cat and a Dog properties.
(new scope.Cat).talk()
这个例子没有太多意义,因为它可以写成animals={};将animals.Cat分类,避免需要额外的嵌套级别,但如果您希望在某个时候动态更改this
,最好了解函数调用的存在(call
:)使用@作为窗口对象的引用可能会产生误导,并可能导致错误(当上下文更改时)。最好是声明一些自定义名称空间
在要加载的第一个脚本中放入一行:
window.myns ?= {}
…以后使用它而不是@like:
class myns.Dog
为了安全起见,在要引用的每个文件的顶部添加名称空间声明行。但这不是强制性的。请确保按正确的顺序加载脚本。我喜欢这种方法,谢谢。我最终在代码顶部定义了一个简单的对象scope=@
,从那时起,文档中的所有内容都被定义为scope.Dog
。您可以随时轻松地为所有对象更改名称空间,代码的任何读者都可以轻松地看到发生了什么。将@scope
定义为我缺少的函数(相对于对象)是否有优势?
class myns.Dog