Middle
class Foo { bar = 1; bla = () => console.log(this.bar); baz = function () {console.log(this.bar);}; } new Foo().bla(); new Foo().baz(); Πες το σύντομα ως εξής: `this` δεν είναι πεδίο ορατότητας, αλλά το πλαίσιο κλήσης της λειτουργίας. Ορίζεται όχι εκεί που δηλώνεται η λειτουργία, αλλά πώς καλείται. Μπορείς να προσθέσεις 3-4 κανόνες: - Συνήθης κλήση λειτουργίας — το `this` είναι συνήθως undefined σε strict mode. - Μέθοδος αντικειμένου — το `this` δείχνει στο αντικείμενο στα αριστερά της τελείας. - call / apply / bind — επιτρέπουν να ορίσεις ρητά το `this`. - Βέλτιστες λειτουργίες — δεν έχουν το δικό τους `this`, το παίρνουν από το εξωτερικό πλαίσιο.
sobes.tech AI
Απάντηση από AI
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 отдельно, например, const f = new Foo(); const fn = f.baz; fn(); — this будет undefined или глобальным объектом.