You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: 1-js/04-object-basics/04-object-methods/article.md
+8-8Lines changed: 8 additions & 8 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -40,7 +40,7 @@ user.sayHi(); // Привет!
40
40
41
41
Итак, мы получили метод `sayHi` объекта `user`.
42
42
43
-
Конечно, мы могли бы заранее объявить функцию и использовать ее в качестве метода, примерно так:
43
+
Конечно, мы могли бы заранее объявить функцию и использовать её в качестве метода, примерно так:
44
44
45
45
```js run
46
46
let user = {
@@ -70,7 +70,7 @@ user.sayHi(); // Привет!
70
70
Существует более короткий синтаксис для методов в литерале объекта:
71
71
72
72
```js
73
-
// эти объекты делают тоже самое (одинаковые методы)
73
+
// эти объекты делают то же самое (одинаковые методы)
74
74
75
75
user = {
76
76
sayHi:function() {
@@ -96,7 +96,7 @@ user = {
96
96
97
97
Как правило, методу объекта необходим доступ к информации, которая хранится в этом объекте, чтобы выполнить с ней какие-либо действия (в соответствии с назначением метода).
98
98
99
-
Например, коду внутри `user.sayHi()` может понадобиться имя пользователя, которое храниться в объекте `user`.
99
+
Например, коду внутри `user.sayHi()` может понадобиться имя пользователя, которое хранится в объекте `user`.
100
100
101
101
**Для доступа к информации внутри объекта метод может использовать ключевое слово `this`.**
102
102
@@ -138,7 +138,7 @@ let user = {
138
138
};
139
139
```
140
140
141
-
...Но такой код будет ненадёжным. Если мы решим скопировать ссылку на объект `user` в другую переменную, например `admin = user` и перезапишем переменную `user` чем-то другим, тогда будет получен доступ к неправильному объекту при вызове метода из `admin`.
141
+
...Но такой код будет ненадёжным. Если мы решим скопировать ссылку на объект `user` в другую переменную, например `admin = user`, и перезапишем переменную `user` чем-то другим, тогда будет получен доступ к неправильному объекту при вызове метода из `admin`.
142
142
143
143
Это показано ниже:
144
144
@@ -157,7 +157,7 @@ let user = {
157
157
158
158
159
159
let admin = user;
160
-
user =null; // обнулим переменную, для наглядности. Теперь переменная user не хранит ссылку на объект.
160
+
user =null; // обнулим переменную для наглядности. Теперь переменная user не хранит ссылку на объект.
161
161
162
162
admin.sayHi(); // Оп! внутри sayHi() используется старая переменная user, которая больше не ссылается на объект! Ошибка!
163
163
```
@@ -257,11 +257,11 @@ user.hi(); // Джон (простой вызов метода работает
257
257
*/!*
258
258
```
259
259
260
-
В последней строчке кода используется тернарный оператор, который определяет, какой будет вызван метод: `user.hi` или `user.bye`, в зависимости от выполнения условия. В данном случае будет выбран `user.hi`.
260
+
В последней строчке кода используется тернарный оператор, который определяет, какой будет вызван метод (`user.hi` или `user.bye`) в зависимости от выполнения условия. В данном случае будет выбран `user.hi`.
261
261
262
262
И тогда метод сразу вызывается с помощью круглых скобок `()`. Но это не работает должным образом.
263
263
264
-
Вы можете видеть, что при вызове будет получен ошибочный результат (или ошибка в строгом режиме), потому что значением `"this"` внутри функции становиться `undefined`.
264
+
Вы можете видеть, что при вызове будет получен ошибочный результат (или ошибка в строгом режиме), потому что значением `"this"` внутри функции становится `undefined`.
265
265
266
266
Так работает (доступ к методу объекта через точку):
267
267
```js
@@ -316,7 +316,7 @@ hi(); // Ошибка, потому что значением this являет
316
316
(user, "hi", true)
317
317
```
318
318
319
-
Когда скобки `()` применяются к значению ссылочного типа (происходит вызов), то полная информация об объекте и его методе является доступной, и может быть установлено правильное значение `this` (=`user` в данном случае). Таким образом, значение `this` определяется значением `base` (база), которое хранится в получаемом (на этапе доступа к свойству) специальном внутреннем объекте ссылочного типа (Reference Type).
319
+
Когда скобки `()` применяются к значению ссылочного типа (происходит вызов), то полная информация об объекте и его методе становится доступной, и может быть установлено правильное значение `this` (=`user` в данном случае). Таким образом, значение `this` определяется значением `base` (база), которое хранится в получаемом (на этапе доступа к свойству) специальном внутреннем объекте ссылочного типа (Reference Type).
320
320
321
321
Любая другая операция, подобная присваиванию `hi = user.hi`, теряет получаемый ссылочный тип и вместо него берёт само значение `user.hi` (функцию) и передаёт его. Поэтому дальнейшая операция с `hi` (вызов) теряет значение `this`.
0 commit comments