update objects
This commit is contained in:
40
docs/javascript/objects/03-methods-this.md
Normal file
40
docs/javascript/objects/03-methods-this.md
Normal file
@@ -0,0 +1,40 @@
|
||||
---
|
||||
sidebar_position: 3
|
||||
---
|
||||
|
||||
# Методы объекта, "this"
|
||||
|
||||
***Для доступа к информации внутри объекта метод может использовать ключевое слово this.***
|
||||
```js
|
||||
let user = {
|
||||
name: "John",
|
||||
|
||||
sayHi() {
|
||||
alert(this.name); // "this" - это "текущий объект".
|
||||
}
|
||||
};
|
||||
```
|
||||
### «this» не является фиксированным
|
||||
В JavaScript ключевое слово «this» ведёт себя иначе, чем в большинстве других языков программирования. Его можно использовать в любой функции, даже если это не метод объекта.
|
||||
|
||||
❗ ***Вызов без объекта: this == undefined***
|
||||
|
||||
В строгом режиме ("use strict") в таком коде значением `this` будет являться `undefined`. Если мы попытаемся получить доступ к this.name – это вызовет ошибку.
|
||||
|
||||
В нестрогом режиме значением `this` в таком случае будет глобальный объект (`window` в браузерe, мы вернёмся к этому позже в главе Глобальный объект). Это – исторически сложившееся поведение `this`, которое исправляется использованием строгого режима ("use strict").
|
||||
|
||||
Обычно подобный вызов является ошибкой программирования. Если внутри функции используется this, тогда она ожидает, что будет вызвана в контексте какого-либо объекта.
|
||||
|
||||
❗ ***Последствия свободного this***
|
||||
|
||||
В JavaScript `this` является «свободным», его значение вычисляется в момент вызова метода и не зависит от того, где этот метод был объявлен, а скорее от того, какой объект вызывает метод (какой объект стоит «перед точкой»).
|
||||
|
||||
Эта концепция вычисления `this` в момент исполнения имеет как свои плюсы, так и минусы. С одной стороны, функция может быть повторно использована в качестве метода у различных объектов (что повышает гибкость).
|
||||
|
||||
### У стрелочных функций нет «this»
|
||||
Стрелочные функции особенные: у них нет своего «собственного» `this`. Если мы ссылаемся на `this` внутри такой функции, то оно берётся из внешней «нормальной» функции.
|
||||
|
||||
1. Методы могут ссылаться на объект через `this`.
|
||||
2. Значение `this` определяется во время исполнения кода.
|
||||
- При объявлении любой функции в ней можно использовать `this`, но этот `this` не имеет значения до тех пор, пока функция не будет вызвана.
|
||||
- Когда функция вызывается синтаксисом «метода» – ***object.method()***, значением `this` во время вызова является `object`.
|
||||
Reference in New Issue
Block a user