1

学習のためにJavaScriptでオブジェクトをトラバースしています。現時点では、関数が与えられた最初のオブジェクトの各プロパティを吐き出し、見つかった子オブジェクト (関数を含む) に再帰することになります。

例として window オブジェクトを使用すると、window.top が wi​​ndow を指しているため、関数は無限ループに陥ります。オブジェクトへの再帰を避けるために、既にトラバースしたオブジェクトを追跡するにはどうすればよいですか?

4

1 に答える 1

1

配列を使用して、現在調べているオブジェクトを格納できます。これは、循環参照の検出に役立つはずです。

var stack = [];
function traverse(object) {
  if (stack.indexOf(object) !== -1) {
    return; // if the condition above is true, we have a circular reference
  }
  stack.push(object);
  // here go through object properties, recursively calling traverse()
  stack.pop();
}
于 2013-02-26T17:41:24.247 に答える