3

これは非常に基本的なことです。埋め込まれた外部の.jsファイルで定義されたクラスをインスタンス化しようとしています。.jsのコードはこれだけです。

(function() {
  var MyClass;

  MyClass = (function() {

    function MyClass() {}

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

    return MyClass;

  })();

}).call(this);

そしてHTMLはこれです

<!DOCTYPE html>
<html>

  <head>
    <title>Sample Page</title>
    <script src="file.js" type="text/javascript"></script>
  </head>

  <body>

  </body>
</html>

コンソールでクラスをインスタンス化しようとしましたが、次のように表示されますReferenceError: MyClass is not defined

var myVar
myVar = new MyClass
> ReferenceError: MyClass is not defined

MyClassコンソールから直接呼び出そうとすると、同じエラーが発生します

> ReferenceError: MyClass is not defined

私はここでひどい明らかな何かを見逃していると確信していますが、それでも私はそれを理解することができます。

更新:CoffeScriptを使用してコード化されたJavaScriptを作成するには、コードはこれだけです。

class MyClass
  acc: (name) ->

http://js2coffee.orgレンダリングを使用してCoffeScriptに変換し直したときに提案された回答コードは別のコードにレンダリングされますが、それでも機能しません。MyClassをローカルスコープから外部スコープに排出するためのヒントがCoffeScriptにあるかどうか疑問に思います。

4

2 に答える 2

5

私のクラスはクロージャー内で定義されています。むしろ、あなたがしたいのは、それをウィンドウオブジェクトに設定することによって、それを外部スコープに「イジェクト」することです。

(function() {

    var myClass = ...

    window.myClass = myClass;

}).call( this );

更新:CoffeeScriptでそれが欲しかったようです。どうぞ:

(->

  myClass = (->
    myClass = ->
    myClass::name = (name) ->

    myClass
  )()

  window.myClass = myClass

).call this

JSBinデモ

于 2012-11-17T21:44:01.997 に答える
2

MyClass自己呼び出し関数のローカルスコープに定義されます。MyClass自己呼び出し関数の外部で初期化を試みることができます。

var MyClass;
(function() {

  MyClass = (function() {

    function MyClass() {}

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

    return MyClass;

  })();

}).call(this);

あなたができるもう一つのことは:

(function() {
  this.MyClass = (function() {

    function MyClass() {}

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

    return MyClass;

  })();

}).call(window);

window上記のコードでは、コンテキストを使用して無名関数を呼び出し、MyClassウィンドウのプロパティに値を設定しているだけです(これによりMyClassグローバルになります)。

別の解決策(私の意見ではより不明確です)は次のとおりです。

(function() {

  window.MyClass = (function() {

    function MyClass() {}

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

    return MyClass;

  })();

}).call(this);

MyClass唯一の違いは、windowのプロパティが関数の実行結果と等しくなることを明示的に言うことです。

CoffeeScriptはおそらく次のようになります。

MyClass = undefined
(->
  MyClass = (->
    MyClass = ->
    MyClass::name = (name) ->

    MyClass
  )()
).call this
于 2012-11-17T21:43:24.107 に答える