2

必要に応じてスクリプト ファイルをロードする JavaScript クラスを作成しようとしています。私はこれのほとんどを機能させています。次の構文でライブラリを使用できます。

var scriptResource = new ScriptResource('location/of/my/script.js');
scriptResource.call('methodName', arg1, arg2);

あなたが書くことができるように、いくつかの構文糖衣を追加したいと思います

var scriptResource = new ScriptResource('location/of/my/script.js');
scriptResource.methodName(arg1, arg2);

これが不可能であることはほぼ確実ですが、独創的な解決策があるかもしれません。必要なのは、ある種の methodCall イベントだと思います。SO以下が機能する可能性があります

ScriptResource = function(scriptLocation)
{
    this.onMethodCall = function(methodName)
    {
        this.call(arguments);
    }
}

このコードは明らかに不完全ですが、私がやろうとしていることのアイデアが得られることを願っています

このようなことはリモートでも可能ですか?

4

3 に答える 3

3

探していることを行う Firefox の非標準メソッド __noSuchMethod__ がありますhttps://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Object/noSuchMethod
をご覧ください

あなたが定義できるように

obj.__noSuchMethod__ = function( id, args ) {
    this[id].apply( this, args );
}
于 2009-01-09T11:35:26.727 に答える
0

中間的な解決策は、次のような構文を持つことです。

var extObj = ScriptResource('location/of/my/script.js');  
extObj('methodname')(arg1,arg2);  

コードは次のようになります。

function ScriptResource(file) {
  return function(method) {
    loadExternalScript(file);
    return window[method];
  }
}

上記のコードにはあらゆる種類の仮定が含まれています。最も興味深いのは、私見ですが、元の実装では、プロキシ化されたメソッドを同期的に実行して値を返すにはどうすればよいですか? 私の知る限り、外部スクリプトを非同期にロードし、「onload」コールバックで処理することしかできません。

于 2009-02-25T20:35:24.350 に答える
0

メソッド名のセットが限られている場合は、それらのメソッドを生成できます。

var methods = ["foo", "bar", "baz"];
for (var i=0; i<methods.length; i++) {
    var method_name = methods[i];
    WildCardMethodHandler[method_name] = function () {
        this.handleAllMethods(method_name);
    };
}

編集:質問が劇的に変わる前にこの回答を投稿しました。

于 2009-01-09T11:23:19.247 に答える