Почему DOM называли объект self
и другой звонил window
когда они - то же самое? Добавить к беспорядку window
назвали свойство self
так:
window === window.self === self
Почему похож на это это? Какой я должен использовать?
self
определяется средой javascript и указывает на [global] объект (но не является частью спецификации, поэтому может не быть там ), а окно
является частью спецификации DOM.
В большинстве браузеров окно
используется как [глобальный] объект, но это не всегда так.
self == window.self
неудивительно, поскольку это один и тот же объект - когда ищется self
, он обнаруживается как свойство глобального объекта ( окно
). Фактически это то же самое, что window.self == window.self
.
Как отмечалось в другом месте, для надежной ссылки на объект [global]
вы должны определить его в своей sef, запустив var global = this;
в глобальном контексте выполнения.
Глобальный self
является сокращением для window.self
. Они оба являются одним и тем же объектом.
Что касается того, почему существуют window
и self
, то в контексте веб-страницы self
всегда равен window
(насколько я знаю). Но я полагаю, что это не обязательно должно быть всегда так - Javascript/ECMAScript не ограничивается использованием в веб-странице, где есть DOM.
Что касается того, что использовать, оба должны быть безопасны для использования в контексте обычной веб-страницы AFAIK. См. комментарий @Nick, где приведены веские аргументы в пользу использования window
, однако.
Когда вы вызываете self
, это window.self
, то же самое там вроде любое другое глобальное свойство (например, location
на самом деле является window.location
).
Причина, по которой он там? Обычно для таких проверок:
if(window.top != window.self) {
alert("We're in a frame");
}