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'

ウィンドウのプレフィックスを付けずにクラスを定義するにはどうすればよいですか?

4

1 に答える 1

1

CoffeeScriptを使用してコンパイルできます--bareが、グローバル名前空間を汚染する可能性があるため、通常はお勧めしません。

私の提案はwindow、2番目の例のように、クラスをオブジェクトにアタッチすることです。さらに良いのは、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 FAQ

于 2012-10-01T15:56:22.983 に答える