Skip to content

Commit a347506

Browse files
committed
👾 just ran through eyo
1 parent 1821117 commit a347506

1 file changed

Lines changed: 11 additions & 11 deletions

File tree

1-js/09-classes/02-class-inheritance/article.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ let animal = new Animal("Мой питомец");
3232

3333
![](rabbit-animal-independent-animal.svg)
3434

35-
...И мы хотели бы создать еще один `class Rabbit`.
35+
...И мы хотели бы создать ещё один `class Rabbit`.
3636

3737
Поскольку кролики - это животные, класс `Rabbit` должен быть основан на `Animal`, иметь доступ к методам animal, так чтобы кролики могли делать то, что могут делать "общие" животные.
3838

@@ -236,7 +236,7 @@ let rabbit = new Rabbit("Белый кролик", 10); // Error: this is not de
236236

237237
...Но почему? Что происходит? Это требование кажется довольно странным.
238238

239-
Конечно, всему есть свое объяснение. Давайте углубимся в детали, чтобы вы действительно поняли, что происходит.
239+
Конечно, всему есть своё объяснение. Давайте углубимся в детали, чтобы вы действительно поняли, что происходит.
240240

241241
В JavaScript существует различие между "функцией-конструктором наследующего класса" и всеми остальными. В наследующем классе соответствующая функция-конструктор помечена специальным внутренним свойством `[[ConstructorKind]]:"derived"`.
242242

@@ -283,16 +283,16 @@ alert(rabbit.earLength); // 10
283283
### Переопределение полей класса: каверзное замечание
284284

285285
```warn header="Продвинутое замечание"
286-
В этом примечании предполагается, что у вас есть определенный опыт работы с классами, возможно, при работе с другими языками программирования.
286+
В этом примечании предполагается, что у вас есть определённый опыт работы с классами, возможно, при работе с другими языками программирования.
287287
288-
Это дает лучшее представление о языке, а также объясняет поведение, которое может быть источником ошибок (но не очень часто).
288+
Это даёт лучшее представление о языке, а также объясняет поведение, которое может быть источником ошибок (но не очень часто).
289289
290290
Если вы нашли этот материал слишком сложным, просто продолжайте, продолжайте читать, а затем вернитесь к нему через некоторое время.
291291
```
292292

293293
Мы можем переопределять не только методы, но и поля класса.
294294

295-
Хотя, когда мы обращаемся к переопределенному полю в родительском конструкторе, возникает каверзное поведение, сильно отличающееся от большинства других языков программирования.
295+
Хотя, когда мы обращаемся к переопределённому полю в родительском конструкторе, возникает каверзное поведение, сильно отличающееся от большинства других языков программирования.
296296

297297
Рассмотрим этот пример:
298298

@@ -321,11 +321,11 @@ new Rabbit(); // animal
321321

322322
Что интересно, так это то, что в обоих случаях: `new Animal()` и `new Rabbit()`, `alert` в строке `(*)` показывает `animal`.
323323

324-
**Другими словами, родительский конструктор всегда использует свое собственное значение поля, а не переопределенное.**
324+
**Другими словами, родительский конструктор всегда использует своё собственное значение поля, а не переопределенное.**
325325

326326
Что в этом странного?
327327

328-
Если это еще не ясно, пожалуйста, сравните с методами.
328+
Если это ещё не ясно, пожалуйста, сравните с методами.
329329

330330
Вот тот же код, но вместо поля `this.name`, мы вызываем метод `this.showName()`:
331331

@@ -354,7 +354,7 @@ new Rabbit(); // rabbit
354354

355355
Обратите внимание: теперь результат другой.
356356

357-
И это то, чего мы, естественно, ожидаем. Когда родительский конструктор вызывается в производном классе, он использует переопределенный метод.
357+
И это то, чего мы, естественно, ожидаем. Когда родительский конструктор вызывается в производном классе, он использует переопределённый метод.
358358

359359
...Но для полей класса это не так. Как уже было сказано, родительский конструктор всегда использует родительское поле.
360360

@@ -366,13 +366,13 @@ new Rabbit(); // rabbit
366366

367367
В нашем случае `Rabbit` - это производный класс. В нем нет конструктора `constructor()`. Как было сказано ранее, это то же самое, как если бы существовал пустой конструктор только с `super(...args)`.
368368

369-
Итак, `new Rabbit()` вызывает `super()`, таким образом, выполняя родительский конструктор, и (согласно правилу для производных классов) только после этого инициализируются поля его класса. На момент выполнения родительского конструктора еще нет полей класса `Rabbit`, поэтому используются поля `Animal`.
369+
Итак, `new Rabbit()` вызывает `super()`, таким образом, выполняя родительский конструктор, и (согласно правилу для производных классов) только после этого инициализируются поля его класса. На момент выполнения родительского конструктора ещё нет полей класса `Rabbit`, поэтому используются поля `Animal`.
370370

371371
Это тонкое различие между полями и методами специфично для JavaScript.
372372

373-
К счастью, такое поведение проявляется только в том случае, если в родительском конструкторе используется переопределенное поле. Тогда может быть трудно понять, что происходит, поэтому мы объясняем это здесь.
373+
К счастью, такое поведение проявляется только в том случае, если в родительском конструкторе используется переопределённое поле. Тогда может быть трудно понять, что происходит, поэтому мы объясняем это здесь.
374374

375-
Если это становится проблемой, ее можно исправить, используя методы или геттеры/сеттеры вместо полей.
375+
Если это становится проблемой, её можно исправить, используя методы или геттеры/сеттеры вместо полей.
376376

377377
## Устройство super, [[HomeObject]]
378378

0 commit comments

Comments
 (0)