Что “сам” означает в JavaScript?

Я считал здесь, что "сам Относится к текущему окну или форме".

Сам, кажется, не относится к текущей форме в этом случае:

Однако в этом случае это работает (относящийся к окну):

Таким образом, когда был бы Вы использовать self Свойство DOM просто window?

25
задан laconbass 2 June 2015 в 03:29
поделиться

4 ответа

Для всех окон, self и window свойства объекта window являются синонимы для текущего окна, и вы можете по желанию использовать их для ссылки на текущее окно. Например, вы можете закрыть текущее окно, вызвав вызвав метод close либо для window, либо для . window или self. Вы можете использовать эти свойства, чтобы сделать ваш код более более читабельным или для однозначного определения ссылку на свойство self.status из формы под названием status.

10
ответ дан 28 November 2019 в 21:11
поделиться

В других ответах указывалось, что 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
12
ответ дан 28 November 2019 в 21:11
поделиться

self не является зарезервированным ключевым словом или стандартным типом, но фактически стало стандартным именем для сохранения ссылки на объект для закрытия.

Здесь мы создаем закрытие для перехода к setTimeout () . Когда это закрытие выполняется, this будет ссылаться на глобальный объект. Для сохранения ссылки на объект foo doLater изначально был вызван, используется переменная с именем self . Это может быть что угодно, но «я» имеет значимую семантику.

Foo.prototype.doLater = function() {
  var self = this; // current object

  window.setTimeout(function() { self.doSomething(); }, 1000);
}

new Foo().doLater();
11
ответ дан 28 November 2019 в 21:11
поделиться

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

function Constructor() {
    var self = this;
}

Вы должны использовать this для обозначения рассматриваемого элемента, а не self . Однако в глобальном масштабе этот является ссылкой на окно , а self также является окном .

6
ответ дан 28 November 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: