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

Что означает "я" в javascript?

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

В этом случае сам я не ссылаюсь на текущую форму:

<form><input type="text" onkeyup="alert(self.foo.value)" name="foo"></form>

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

<form><input type="text" onkeyup="alert(self.document.forms[0].foo.value)" name="foo"></form>

Итак, когда вы использовали бы свойство self DOM только для window?

4b9b3361

Ответ 1

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

Ответ 2

В других ответах указано, что self не будет ссылаться на FORM и что self есть window. Они правы; self - window. Хорошо, если только это не так. В IE6 или IE7 (забыли) self.onload не срабатывает, хотя window.onload будет.

Все официальные версии IE (и даже IE9pr3) имеют нечетную, непереходную реализацию == с этими объектами хоста. Используя == для сравнения window или self с node в документе, результат 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

Ответ 3

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

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

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

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

new Foo().doLater();

Ответ 4

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

function Constructor() {
    var self = this;
}

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