5

以下のスニペットを見てください。...別の関数で再利用できる、ルートを生成する代わりに記述できる関数はありますか? もしかしてみたいなvar route = this.show.fullyQualifiedName

var services = {
    'github.com': {
        api: {
            v2: {
                json: {
                    repos: {
                        show: function(username, fn) {
                            var route = ...; 
                            // route now == 'github.com/api/v2/json/repos/show'

                            route += '/' + username;

                            return $.getJSON('http://' + route).done(fn);
                        }
                    }
                }
            }
        }
    }
}
4

2 に答える 2

3

いいえ、少なくとも「反射」スタイルの操作を使用しない限り、ありません。

特に、同じオブジェクト (参照) が多くのオブジェクトに含まれている可能性があるため、オブジェクトはそれらが含まれているオブジェクトの名前を認識していません。

それを行う唯一の方法は、一番上のオブジェクトから始めて、内側に向かって作業することです。次に例を示します。

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);
    }
}

_routeこれにより、そのオブジェクトのパスを含む各オブジェクトに新しいプロパティが配置されます。

http://jsfiddle.net/alnitak/WbMfW/を参照してください

于 2012-04-27T17:24:03.170 に答える
1

Alnitakが言ったように、再帰的な検索を行うことはできませんが、オブジェクトのサイズによっては多少遅くなる可能性がありますが、トップダウン検索を行うことはできます。オブジェクトのプロパティをループして、子があるかどうかを確認します。子がある場合は、それをループします。チェーンの最後に到達し、関数が見つからない場合は、次の子に移動して検索を続けます。

今は例を書く時間はありませんが、うまくいけば、これから何かをまとめることができます.

于 2012-04-27T17:26:36.357 に答える