2012-04-27 5 views
5

以下のスニペットをご覧ください。 ...の代わりに書くことができる関数はありますか?それは別の関数で再利用できますか?おそらくvar route = this.show.fullyQualifiedNameのようなものでしょうか?JavaScript:内部から完全修飾の関数名を取得していますか?

+0

トップダウン検索はできません。私は 'show'の完全な道を提供していない限り、その試合が見つかったとき、どのようにして検索を知るでしょうか?そして、 'show'の完全なパスを提供すれば、それは' show'のようなメソッドの中から 'route'値を取得する単一の関数を使用する点を打ち消します。 – barfoo

+0

これまで関数を呼び出す前に、再帰的にツリーを塗りつぶさなければなりません。 – Alnitak

答えて

3

いいえ、少なくとも「リフレクション」スタイルの操作は使用していません。同じオブジェクト(参照)多くオブジェクト内に含まれる可能性があるため

オブジェクトは、それらが含まれていているオブジェクトの名前ではなく、少なくともの知識がありません。あなたがそれを行うことができ

唯一の方法は:、そのオブジェクトのパスが含まれている各オブジェクトに新しい_routeプロパティを置く

function fillRoutes(obj) { 
    var route = obj._route || ''; 
    for (var key in obj) { 
     if (key === '_route') continue; 
     var next = obj[key]; 
     next._route = route + '/' + key; 
     fillRoutes(next); 
    } 
} 

を例えばを最上位のオブジェクトで開始し、内側にあなたのように動作するようになります。

http://jsfiddle.net/alnitak/WbMfW/

1

は、あなたが言ったオリオン座ゼータ星のように、再帰的な検索を行うことはできませんを参照してください、それはあなたのオブジェクトのサイズに応じて多少遅くなる可能性が、あなたは、トップダウンの検索を行うことができます。オブジェクトのプロパティをループし、子があるかどうかを確認します。それが子供を持っている場合は、それをループします。チェーンの終わりに達し、あなたの機能が見つからない場合は、次の子に移動して検索を続行します。

今すぐサンプルを書く時間がありませんが、これから何かを一緒に作れますように。

関連する問題