2013-01-20 64 views
0

我使用requirejs在一個非常簡單的方法的應用: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的上下文中有一個簡單/好方法來實現這個?

+0

有一個requirejs.arguments在API中,從來沒有嘗試過,也許有趣。 – mpm

回答

1

您永遠不需要在運行時知道變量名稱。你的應用程序有問題。

但是,你可以做到這一點。獲取serialisation of the function,刪除評論等,並解析參數列表。爲了獲得該函數本身,您可以使用已棄用的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]); 
+0

我知道這似乎很奇怪,但我使用參數的名稱來構建主對象。我實際上找到了一種更好的方式,使用數組並將數組索引與參數索引鏈接起來。 – Fluidbyte