Подтвердить что ты не робот

Какая разница между собой и окном?

У меня есть JavaScript, который занимается обнаружением, находится ли страница в кадрах или нет. Я использовал top.frames [] и т.д., И все работает нормально.

В этом script я заметил, что я могу использовать "окно" или "я" взаимозаменяемо, и все еще работает. Является ли "окно" таким же, как "self" при использовании на странице HTML?

4b9b3361

Ответ 1

Из Javascript: Полное руководство:

Объект Window определяет ряд свойства и методы, которые позволяют вам для управления окном веб-браузера. Он также определяет свойства, которые ссылаются к другим важным объектам, таким как свойство document для Объект документа. Наконец, окно объект имеет два самореферентных свойства, window и self. Вы может использовать глобальную переменную обратитесь непосредственно к объекту Window.

Короче говоря, оба window и self являются ссылками на объект Window, который является глобальным объектом клиентского javascript.

Ответ 2

self - это свойство только для чтения, которое может быть более гибким, чем, а иногда и использоваться в пользу, window напрямую. Это связано с тем, что ссылка self изменяется в зависимости от рабочего контекста (в отличие от window.self, который существует, только если существует window). Это также отлично подходит для сравнения, как уже упоминали другие.

Например, если вы используете self внутри Web Worker (который находится в своем собственном фоновом потоке), self будет фактически ссылаться на WorkerGlobalScope.self. Однако, если вы используете self в обычном контексте браузера, self просто возвратит ссылку на Window.self (ту, которая имеет document, addEventListener(), и все остальные вещи, которые вы привыкли видеть).

TL; DR, в то время как .self в window.self не будет существовать, если window не существует, использование self само по себе будет указывать на Window.self в традиционном контексте окна/браузера или WorkerGlobalScope.self в контекст веб-работника.

Как обычно, MDN имеет отличную рецензию на эту тему в своих документах JavaScript. :)


Примечание: использование self здесь не следует путать с общим шаблоном JS объявления локальной переменной: var self = this для поддержания ссылки на контекст после переключения.

Подробнее об этом можно прочитать здесь: Выход из обязательных ситуаций в JavaScript.

Ответ 3

Здесь объяснение и пример из страница MDN для window.self:

if (window.parent.frames[0] != window.self) {
   // this window is not the first frame in the list
}

window.self почти всегда используется в сравнении, как в примере выше, в котором выясняется, является ли текущее окно первым подкадром в родительском наборе фреймов.

Учитывая, что в наши дни никто не использует фреймы, я думаю, что можно считать, что для self нет полезных случаев. Кроме того, по крайней мере в Firefox, тестирование на window вместо window.self эквивалентно.