1

私はこのようなdojo定義関数を持っています

define([
    // some param
]),function(foo, bar, baz, fooz, ...){
    return{
        // some custom code
    }
}

関数 args(foo, bar, ...) に動的にアクセスしたい

私はそれをvarにラップできることを知っています

foo : foo

そしてそれにアクセスする

this[objectToCall].methodToRun();

この例では、呼び出しは

this.run('foo');

function run(objectToCall){ // foo    
    this[objectToCall].methodToRun(); // refer to foo
}

var にラップせずにこれを達成する方法はありますか?

thx事前に

編集 :

さらに一歩、argumentsキーワードを使用できます。

function(foo, bar, baz, fooz, ...){
    var functionArguments = arguments;
    return{
        // some custom code
    }
}

functionArguments['foo']しかし、 ;で foo オブジェクトにアクセスできません。

4

2 に答える 2

0

インターフェイス定義のような「methodToRun」関数を使用しようとしているようです。

適切なオブジェクトを動的に選択したいという場合、オブジェクトをコードのどこかにある var に格納しているように聞こえます (例: var selectedObject = foo;)。

動的であるため、selectedObject.methodToRun(); を使用してオブジェクトのメソッドを呼び出すだけでよいはずです。

(ただし、実際に「methodToRun」を実装するオブジェクトのみを提供するかどうかはあなた次第です。そうしないと、「オブジェクトはこのメソッドをサポートしていません」というエラーが発生します。)

于 2012-05-22T08:31:27.373 に答える
0

解決策を見つけました:

function(method){
    var len = functionArguments.length;
    for(var i = 0; i < len; i ++){
        if(typeof functionArguments[i] === "object")
            if(functionArguments[i].name == method)
                functionArguments[i].test();
            }

オブジェクトの定義に name パラメータを追加しました

于 2012-05-22T08:56:42.587 に答える