Почему "window = window.parent;" создать бесконечный цикл? - PullRequest
5 голосов
/ 23 марта 2012

Я просматривал иерархию кадров и пытался найти верхний кадр следующим образом:

var win = window;
while (win.parent) {
    //perform actions on win
    win = win.parent;
}

К настоящему времени я знаю, что правильное условие зацикливания должно быть:

while (win !== top) {

Проверка существования на win.parent создает бесконечный цикл.Есть ли какая-то конкретная причина, почему это так?Почему у top должен быть родитель?

Ответы [ 2 ]

5 голосов
/ 23 марта 2012

Вы также должны проверить, если window.parent == window​ равно false, иначе вы получите бесконечный цикл. Couse, если нет родителя, родительское свойство будет ссылаться на себя (бесконечный цикл).

var win = window;
while (win.parent && win.parent != win) {
    //perform actions on win
    win = win.parent;
}​

http://jsfiddle.net/EZfHf/

Я нашел это в MDN:

Если у окна нет родителя, его родительское свойство является ссылкой к себе.

Ссылка на MDN:

https://developer.mozilla.org/en/DOM/window.parent

2 голосов
/ 23 марта 2012
Родитель

top сам.

top == top.parent //true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...