Я считал здесь, что "сам Относится к текущему окну или форме".
Сам, кажется, не относится к текущей форме в этом случае:
Однако в этом случае это работает (относящийся к окну):
Таким образом, когда был бы Вы использовать self
Свойство DOM просто window
?
Для всех окон,
self
иwindow
свойства объектаwindow
являются синонимы для текущего окна, и вы можете по желанию использовать их для ссылки на текущее окно. Например, вы можете закрыть текущее окно, вызвав вызвав методclose
либо дляwindow
, либо для .window
илиself
. Вы можете использовать эти свойства, чтобы сделать ваш код более более читабельным или для однозначного определения ссылку на свойствоself.status
из формы под названиемstatus
.
В других ответах указывалось, что self
не будет ссылаться на ФОРМУ
и что self
- это окно
. Они правы; self
- это окно
. Ну, кроме случаев, когда это не так. В IE6 или IE7 (забыл) self.onload
не сработает, а window.onload
будет.
Все официальные версии IE (и даже IE9pr3) имеют нечетную, непереходную реализацию ==
с этими хост-объектами. Использование ==
для сравнения либо window
, либо self
с узлом в документе, результат будет true
.
IE Oddities
alert(self == document.body); // true alert(document.body == self); // false alert(window == self); // true alert(window === self); //false var b = document.createElement("b"); alert(window == b); // false alert(window == document.body.appendChild(b)); // true alert(window == document.body.removeChild(b)); // false
self
не является зарезервированным ключевым словом или стандартным типом, но фактически стало стандартным именем для сохранения ссылки на объект для закрытия.
Здесь мы создаем закрытие для перехода к setTimeout ()
. Когда это закрытие выполняется, this
будет ссылаться на глобальный объект. Для сохранения ссылки на объект foo
doLater
изначально был вызван, используется переменная с именем self
. Это может быть что угодно, но «я» имеет значимую семантику.
Foo.prototype.doLater = function() {
var self = this; // current object
window.setTimeout(function() { self.doSomething(); }, 1000);
}
new Foo().doLater();
Никогда, если я не хочу создать переменную self
в области действия функции, ссылающейся на контекст для дальнейшего использования,
function Constructor() {
var self = this;
}
Вы должны использовать this
для обозначения рассматриваемого элемента, а не self
. Однако в глобальном масштабе этот
является ссылкой на окно
, а self
также является окном
.