1

スクリプトの上にいくつかの関数があるとしましょう。ハッシュ マッピング関数名 {string} をその下に定義された関数に指定すると、コードでは次のようになります。

collect({"f1" : f1, "f2" : f2 })

問題は、collectがページの上部にある場合、f1、f2、.. は、これらの関数がまだ定義されていないため、未定義を指すことです。簡単な解決策はcollect、ページの下部に配置することです。しかし、頑固に一番上に置く必要がある場合、他のすべての関数が解析されるまで collect の実行を遅らせるにはどうすればよいでしょうか?

残りの関数は次の形式で定義されていることに注意してください。

var name; 
name = function(){ .. }

おまけの質問:

collecthas マッピング名を関数に渡す代わりに、関数のリストまたは文字列のリストを渡すだけで同じ効果が得られるように定義できれば、さらに良いでしょう。コードでは、次のようなものです

collect([f1,f2]) 
collect(["f1","f2"])

更新:私が求めていることについて明確ではないと思います。ファイルの残りの部分が解析されるまで、関数の実行を遅らせることを特に検討しています。私がやろうとしていることのセマンティクスを変更する他のハックを介して、この動作を再現するつもりはありません。

4

2 に答える 2

0

オブジェクトとプロトタイプについて学ぶ時が来たと思います。function Whatever(){}プロトタイプを使用してオブジェクトを作成し、次Whatever.prototype = { f1: ..., f2: ...}を使用して関数が他の関数を参照するようにしますthis

function Whatever() {};
Whatever.prototype = {
  f1: function() {
    // don't care that this function doesn't exist yet,
    // because what an object is built from this prototype,
    // ALL functions will exist at the same time. Handy.
    this.f2("this is a string");
  },
  f2: function(s) {
    console.log(s);
  }
}; 
var what = new Whatever();
what.f2("lol");
what.f1();
于 2013-09-14T20:33:02.530 に答える