0

私はJavaの初心者ですが、コードは説明の下にありますこれはゲームのコードですが、問題は次のとおりです。ナビゲーター機能を使用して、ゲームでナビゲーターをクリックすると、ある種の(ajax?)が続き、それが得られますログに記録されます。しかし、FireBug コンソールを使用すると、リターン行より上の関数でメッセージを送信できません。 基本的に.. ThisFunction.* が示す唯一の関数は、一番下に返されたものです。Navigator 機能を呼び出すにはどうすればよいですか? 私は試しました: ThisFunction.a.navigator(args here);

、しかし、それは a is undefined と言っています..オートコンプリートリストにも表示されません。

** ゲームのコードなので削除しました。助けてくれてありがとう!**

4

3 に答える 3

1

あなたはこのビットでそれを頭に釘付けにしました:

ThisFunction.* が示す唯一の関数は、一番下に返されたものです

それが言語の期待された意図的な機能です。

簡単な答え:外部からアクセスできるようにしたいものはすべてクロージャーから返す必要があります...それは a 変数である可能性があります。または、外部からプライベートに保ちながら a 変数にアクセスできる API である可能性があります。これはレキシカルスコープと呼ばれ、あなたの友達です。

時間の例:

var ThisFunction = (function() {
  var a = { navigator: "woot" };
  var b = function() {
    return a;
  }
});
ThisFunction.a; //a is null/undefined on the returned
ThisFunction.b; //b is defined yay
var aOUTSIDE = ThisFunction.b();
aOUTSIDE.navigator; // "woot"

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures

したがって、A で取得できるのは、a と同じ「スコープ」で var 化されたものだけです。したがって、スコープ外に A を返すか、A を取得するか、A の内部の一部を実行するための API を提供するスコープ内から何かを返します...

于 2013-08-14T19:26:39.633 に答える
0

内容に応じてOTHERFUNCTIONSHERE、それらの関数が変数を閉じている場合は、これらの関数のいずれかからアクセスできますa(ところで、なぜそのような不可解な var 名があるのでしょうか?)。それ以外の場合は対象外です。

于 2013-08-14T19:24:50.820 に答える