You don't know js(up & going)


Download 424.95 Kb.
Pdf ko'rish
bet42/53
Sana08.11.2023
Hajmi424.95 Kb.
#1757840
1   ...   38   39   40   41   42   43   44   45   ...   53
Bog'liq
You don\'t know JS(up & going)

Идентификатор `this`
Еще одна очень часто неверно понимаемая концепция в JavaScript — это
идентификатор `this`. Опять таки, есть пара глав по нему в книге *this и
прототипы объектов* этой серии, поэтому здесь мы только кратко его
рассмотрим.
При том что может часто казаться, что ключевое слово `this` связано с
"объектно-ориентированным шаблонами", в JS `this` — это другой механизм.
Если у функции есть внутри ссылка `this`, эта ссылка `this` обычно указывает на
`объект`. Но на какой `объект` она указывает зависит от того, как эта функция
была вызвана.
Важно понимать, что `this` *не* ссылается на саму функцию, хотя это самое
распространенное неверное представление.
Вот краткая иллюстрация:
____________________________________________________________________
function foo() {
console.log( this.bar );
}
var bar = "global";
var obj1 = {
bar: "obj1",
foo: foo
};
var obj2 = {
bar: "obj2"
};


//--------
foo();
// "global"
obj1.foo();
// "obj1"
foo.call( obj2 );
// "obj2"
new foo();
// undefined
____________________________________________________________________
Есть четыре правила того, как устанавливается `this`, и они показаны в этих
четырех последних строках кода.
1. `foo()` присваивает в `this` ссылку на глобальный объект в нестрогом режиме.
В строгом режиме, `this` будет `undefined`, и вы получите ошибку при доступе к
свойству `bar`, поэтому `"global"` — это значение для `this.bar`.
2. `obj1.foo()` устанавливает `this` в объект `obj1`.
3. `foo.call(obj2)` устанавливает `this` в объект `obj2`.
4. `new foo()` устанавливает `this` в абсолютно новый пустой объект.
Резюме: чтобы понять, на что указывает `this`, вам нужно проверить, как именно
вызывалась функция. Это будет один из тех четырех вышеописанных способов,
таким образом вы поймете, что будет в `this`.
**Примечание:** Более детальная информация о ключевом слове `this` есть в
Download 424.95 Kb.

Do'stlaringiz bilan baham:
1   ...   38   39   40   41   42   43   44   45   ...   53




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling