1

これは、以前の質問Javascript: ReferenceError: MyClass is not definedのフォローアップです。

これを .js に変換した .coffee ファイルは、MyClassそのスコープ内でのみ使用可能な を作成します。

class MyClass
    name: (name) -> 

CoffeScript でクラスを外部スコープで使用できるようにする方法はありますか? <script src..HTML ページ上のファイルにアクセスして、コンソールからクラスをインスタンス化できるはずです。

4

2 に答える 2

3

どうやっても「グローバルスコープを汚染する」でしょう。それはあなたがそれをどのように行うかの問題です。

CoffeeScriptの@記号は、「このスコープ」を意味するために使用されます。したがって、クラス定義で使用することもできます。クラス宣言の結果は、クラスがwindowオブジェクトのスコープで定義されることです (他の状況がない限り、ただし、ここで説明していることはそうではありません)。

class @CustomClassName
    constructor: -> 
        # constructor stuff goes down...

ただし、個人的には名前空間でこれを行うことを好みます。google.maps.MapActionscript 3:について考えてみてくださいflash.display.MovieClip

CoffeeScript ファイルの先頭に、次の行に沿って何かを置きます。

window.customnamespace = window.customnamespace || {}

クラスを作成するときに、次のように言うことができます。

class customnamespace.ClassName
    constructor: (container) ->
        # set the container
        @container = container
        # etc...

class customnamespace.OtherClassName
    constructor: ->
        # Another class...

document.ready(jQuery を使用している場合) では、その名前空間とそのすべてのクラスにグローバルにアクセスできます。

例:

$(document).ready(function(e) {
    var c = new customnamespace.ClassName($('#container'));

    var other = new customnamespace.OtherClassName();

わかる?

于 2012-11-17T22:21:58.147 に答える
1

このスタックオーバーフローは、いくつかの非常に良い例を含む、coffeescript を使用してグローバル オブジェクトを作成するための非常に包括的な概要を提供します。

この例では、coffeescript:

window.MyClass = class MyClass
    name: (name) -> 

次のようにコンパイルされます。

var MyClass;

window.MyClass = MyClass = (function() {

  function MyClass() {}

  MyClass.prototype.name = function(name) {};

  return MyClass;

})();

これにより、前の質問に対する回答と同じ動作が得られます。

于 2012-11-17T22:09:45.913 に答える