Coffeescript 咖啡脚本:为什么赢了';我的课堂作业没有加前缀window吗?
我有一个外部文件,其中定义了我的类:Coffeescript 咖啡脚本:为什么赢了';我的课堂作业没有加前缀window吗?,coffeescript,Coffeescript,我有一个外部文件,其中定义了我的类: class MyClass constructor: -> alert 'hello' 当CoffeeScript被编译成JavaScript时,它会用闭包将其包装起来。因此,当我尝试在一些JavaScript中使用它时: $(function(){ var ob = new MyClass(); }); 我得到一个错误: Uncaught ReferenceError: MyClass is not defined 但是如果我在
class MyClass
constructor: ->
alert 'hello'
当CoffeeScript被编译成JavaScript时,它会用闭包将其包装起来。因此,当我尝试在一些JavaScript中使用它时:
$(function(){
var ob = new MyClass();
});
我得到一个错误:
Uncaught ReferenceError: MyClass is not defined
但是如果我在类名前面加上window,它会起作用:
class window.MyClass
constructor: ->
alert 'hello'
如何定义类而不使用window作为前缀?您可以使用
--bare
编译CoffeeScript,但通常不建议这样做,因为您可能会污染全局命名空间
我的建议是将类附加到窗口
对象,就像您的第二个示例一样,或者更好地使用CoffeeScript文档中的这个名称空间函数将类附加到附加到窗口
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
# Usage:
#
namespace 'Hello.World', (exports) ->
# `exports` is where you attach namespace members
exports.hi = -> console.log 'Hi World!'
namespace 'Say.Hello', (exports, top) ->
# `top` is a reference to the main namespace
exports.fn = -> top.Hello.World.hi()
Say.Hello.fn() # prints 'Hi World!'
namespace=(目标、名称、块)->
[目标、名称、块]=[(如果导出类型不是“未定义”,则导出其他窗口)、参数…]如果arguments.length<3
顶部=目标
target=target[item]或={}用于name.split.'中的项
顶住目标
#用法:
#
名称空间“Hello.World”(导出)->
#“exports”是附加命名空间成员的位置
exports.hi=->console.log“hi World!”
名称空间“Say.Hello”,(导出,顶部)->
#'top'是对主命名空间的引用
exports.fn=->top.Hello.World.hi()
Say.Hello.fn()打印“嗨,世界!”
来源:您可以使用
--bare
编译CoffeeScript,但通常不建议这样做,因为您可能会污染全局命名空间
我的建议是将类附加到窗口
对象,就像您的第二个示例一样,或者更好地使用CoffeeScript文档中的这个名称空间函数将类附加到附加到窗口
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
# Usage:
#
namespace 'Hello.World', (exports) ->
# `exports` is where you attach namespace members
exports.hi = -> console.log 'Hi World!'
namespace 'Say.Hello', (exports, top) ->
# `top` is a reference to the main namespace
exports.fn = -> top.Hello.World.hi()
Say.Hello.fn() # prints 'Hi World!'
namespace=(目标、名称、块)->
[目标、名称、块]=[(如果导出类型不是“未定义”,则导出其他窗口)、参数…]如果arguments.length<3
顶部=目标
target=target[item]或={}用于name.split.'中的项
顶住目标
#用法:
#
名称空间“Hello.World”(导出)->
#“exports”是附加命名空间成员的位置
exports.hi=->console.log“hi World!”
名称空间“Say.Hello”,(导出,顶部)->
#'top'是对主命名空间的引用
exports.fn=->top.Hello.World.hi()
Say.Hello.fn()打印“嗨,世界!”
资料来源:我经常做self.MyClass=class MyClass并且想知道是否有更好的方法。顺便说一句,我使用了
self
,因为它更便于携带,网络工作者没有窗口
对象。我经常使用self.MyClass=class MyClass
,我想知道是否有更好的方法。顺便说一句,我使用了self
,因为它更便于携带,web工作者没有窗口
对象。