0

それぞれに同じ機能を持つ一連のライブラリがあります (各ライブラリはテンプレートに関連付けられており、ユーザーの要求に応じて毎回異なるテンプレートを使用できます)。関数を動的に呼び出すコードを作成しようとしています。関数が同じスクリプト内にある限り、これは問題ありません。ただし、私の関数は異なるライブラリにあり、それらを呼び出そうとするとエラーが発生します: 実行に失敗しました: TypeError: 関数 Script2.returnWord がオブジェクト [オブジェクト オブジェクト] に見つかりません。(25 行目、ファイル「dynamicFunctionsTest」)。

コードは次のとおりです。

function test1() { 
  return 'raining';
}

function test2() {
  return 'cats';
}

function test3() { 
  return ScriptLibrary1.returnWord();   // the function returns the word 'and'
}

function testing() {

  var message;
  var func = [];
  func [0] = 'test1';
  func [1] = 'test2';
  func [2] = 'test3';
  func [3] = 'ScriptLibrary2.returnWord';  // the function returns the word 'dogs'

  Browser.msgBox(func);  // check values before calling

  for (var i = 0; i < func.length ; ++i) {    
    message = this[func[i]]();               // this line fails on the 4th one
    Browser.msgBox(message);
  }  
}

最初の 3 つが機能しています (3 つ目は、ローカルで呼び出すことができるかどうかを確認するための単なるテストでしたが、これは機能しますが、目的には不十分です)、4 つ目では失敗します。

誰でもそれを機能させる方法を知っていますか?

ありがとう。PS。スクリプトは、Google スプレッドシートから呼び出されます。

4

3 に答える 3

1

1 つのオプションはeval()を使用することですが、この関数には注意が必要です。

...
message = eval(func[i])();
...

別のオプションは次のとおりです。

...
var myFunc;
...
myFunc = new Function('return ' + func[i]);
message = myFunc()();
...
于 2013-09-08T19:05:37.650 に答える
0

これはライブラリの使用方法ではありません。すべてを単一のライブラリに配置し、どのライブラリを呼び出すかを指示する追加のパラメーターを用意します。

于 2013-09-08T19:44:10.470 に答える