У меня есть JavaScript, который занимается обнаружением, находится ли страница в кадрах или нет. Я использовал top.frames [] и т.д., И все работает нормально.
В этом script я заметил, что я могу использовать "окно" или "я" взаимозаменяемо, и все еще работает. Является ли "окно" таким же, как "self" при использовании на странице HTML?
Ответ 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
эквивалентно.
Ответ 4
window
и self
оба относятся к глобальному объекту текущей веб-страницы.
Для получения дополнительной информации см. http://www.howtocreate.co.uk/tutorials/javascript/browserinspecific