Все знают о this в javascript, но есть также примеры self, встречающиеся в дикой природе, такие как здесь
Итак, в чем разница между this и self в JavaScript?
Все знают о this в javascript, но есть также примеры self, встречающиеся в дикой природе, такие как здесь
Итак, в чем разница между this и self в JavaScript?
Если не указано иное, значение 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 здесь.
Хотя я опаздываю здесь, но я наткнулся на один пример, который тоже может быть полезен для понимания 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 5thisво внутренней функции будет undefined.
нет Исправление: поскольку gal007 упоминает в комментариях selfself, когда не определено, будет ссылка на глобальный объект window
programemrs иногда используют переменную self, чтобы ссылаться на this, когда они меняют области видимости и все равно должны ссылаться на this, но не могут измениться, потому что контекст изменился.