Middle
class Foo { bar = 1; bla = () => console.log(this.bar); baz = function () {console.log(this.bar);}; } new Foo().bla(); new Foo().baz(); Röviden így: `this` nem láthatósági terület, hanem a függvényhívás kontextusa. Nem ott van meghatározva, ahol a függvény deklarálva van, hanem ahol meghívják. 3-4 szabályt hozzá lehet adni: - Szokásos függvényhívás — a `this` általában undefined strict módban. - Objektum metódus — a `this` a pont bal oldalán lévő objektumra mutat. - `call / apply / bind` — lehetővé teszik a `this` explicit beállítását. - Nyíl függvények — saját `this`-ük nincs, a külső kontextusból veszik.
sobes.tech MI
Válasz az MI-től
this — это не область видимости, а контекст вызова функции. Он определяется не там, где функция объявлена, а там, как она вызвана.
Правила:
- Обычный вызов функции —
thisобычноundefinedв strict mode. - Метод объекта —
thisуказывает на объект слева от точки. call / apply / bind— позволяют явно задатьthis.- Стрелочные функции — своего
thisне имеют, берут его из внешнего контекста.
В твоём примере:
class Foo {
bar = 1;
bla = () => console.log(this.bar); // стрелочная, this берётся из Foo
baz = function () {console.log(this.bar);}; // обычная функция, this зависит от вызова
}
new Foo().bla(); // this — экземпляр Foo, выведет 1
new Foo().baz(); // this — тоже экземпляр Foo, выведет 1
Здесь baz вызывается как метод объекта, поэтому this — экземпляр класса. Если бы baz вызвать отдельно, например, const f = new Foo(); const fn = f.baz; fn(); — тогда this был бы undefined.