0

非常に単純な方法でrequirejsを使用するアプリがあります:

define([
    'jquery',
    'scriptone',
    'scripttwo'
], function ($,scriptone,scripttwo) {

for(var i=0, max=arguments.length; i<max; i++){

    // What is the name of the argument ????

}

});

for ループでは、引数の名前を取得できるようにしたいと考えています。これにより、ループが '$'、'scriptone'、'scripttwo' を返すようになります。

これは最終的には関数と引数に関する質問であることはわかっています.RequireJSのコンテキストでこれを達成するための簡単で良い方法があるかどうか疑問に思っていますか?

4

1 に答える 1

1

実行時に変数名を知る必要はありません。アプリケーションに問題があります。

しかし、あなたはそれを行うことができます。関数のシリアル化を取得し、コメントなどを削除して、引数リストを解析します。関数自体を取得するには、deprecated を使用することもできますが、arguments.calleeそれへの名前付き参照を取得することをお勧めします。だからあなたはで終わるかもしれません

var fn = arguments.callee.toString();
var args = fn
  .replace(/\/\/.*?\n|\/\*.*?\*\//g, "") // remove comments
  .match(/^function\s*\S*\s*\(\s*(.+?)\s*\)/)[1] // match arguments list
  .split(/\s*,\s*/) // get argument names
for (var i=0; i<arguments.length; i++)
  console.log((args[i] || "unnamed argument")+":", arguments[i]);
于 2013-01-20T22:27:12.407 に答える