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

Разница между этим и я в JavaScript

Все знают о this в javascript, но есть также примеры self, встречающиеся в дикой природе, такие как здесь

Итак, в чем разница между this и self в JavaScript?

4b9b3361

Ответ 1

Если не указано иное, значение self равно window, потому что JavaScript позволяет вам получить доступ к любому свойству x of window как просто x вместо window.x. Поэтому self действительно window.self, который отличается от this.

window.self === window; // true

Если вы используете функцию, выполняемую в глобальной области видимости, this имеет значение window и, следовательно,

function foo() {
    console.log(
        window.self === window, // is self window?
        window.self === this,   // is self this?
        this === window         // is this window?
    );
}
foo(); // true true true

Если вы используете функцию в другом контексте, this будет ссылаться на этот контекст, но self по-прежнему будет window.

// invoke foo with context {}
foo.call({}); // true false false

Вы можете найти window.self, определенный в рабочем проекте W3C 2006 для объекта Window здесь.

Ответ 2

Хотя я опаздываю здесь, но я наткнулся на один пример, который тоже может быть полезен для понимания this далее:

var myObject = {
 foo: "bar",
 func: function() {
    var self = this;
    console.log("outer func:  this.foo = " + this.foo);
    console.log("outer func:  self.foo = " + self.foo);
    (function() {
        console.log("inner func:  this.foo = " + this.foo);
        console.log("inner func:  self.foo = " + self.foo);
    }());
  }
};
myObject.func();

O/P

outer func:  this.foo = bar
outer func:  self.foo = bar
inner func:  this.foo = undefined
inner func:  self.foo = bar

До ECMA 5 this во внутренней функции будет ссылаться на глобальный объект окна; тогда как по ECMA 5 this во внутренней функции будет undefined.

Ответ 3

нет self Исправление: поскольку gal007 упоминает в комментариях self, когда не определено, будет ссылка на глобальный объект window

programemrs иногда используют переменную self, чтобы ссылаться на this, когда они меняют области видимости и все равно должны ссылаться на this, но не могут измениться, потому что контекст изменился.