1

我有一个外部文件,我在其中定义了我的类:

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 前缀?

4

1 回答 1

1

您可以使用 编译 CoffeeScript,--bare但通常不建议这样做,因为您可能会污染全局命名空间。

我的建议是将类附加到window对象,就像您的第二个示例一样,或者更好的是,使用 CoffeeScript 文档中的这个命名空间函数将您的类附加到附加到window

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!'

资料来源:CoffeeScript 常见问题解答

于 2012-10-01T15:56:22.983 回答