Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixed grammar issues. #79

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions this & object prototypes/ch5.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ myObject.hasOwnProperty( "a" ); // true

## "Класс"

Вы уже могли задаться вопросом: "*Зачем* одному объекту нужна ссылка ссылка на другой объект?" Какой от этого толк? Это очень хороший вопрос, но сначала нам нужно выяснить, чем `[[Prototype]]` **не является**, прежде чем мы сможем понять и оценить то, чем он *является*, и какая от него польза.
Вы уже могли задаться вопросом: "*Зачем* одному объекту нужна ссылка на другой объект?" Какой от этого толк? Это очень хороший вопрос, но сначала нам нужно выяснить, чем `[[Prototype]]` **не является**, прежде чем мы сможем понять и оценить то, чем он *является*, и какая от него польза.

В главе 4 мы выяснили, что в отличие от класс-ориентированных языков в JavaScript нет абстрактных шаблонов/схем объектов, называемых "классами". В JavaScript **просто** есть объекты.

Expand All @@ -145,7 +145,7 @@ myObject.hasOwnProperty( "a" ); // true

### Функции "классов"

В JavaScript есть специфическое поведение, которым долгие годы цинично злоупотребляли для создания *поделок*, внешне *похожих* на "классы". Рассмотрим этот подход более подробно.
В JavaScript есть специфическое поведение, которым долгие годы цинично злоупотребляли для создания *подделок*, внешне *похожих* на "классы". Рассмотрим этот подход более подробно.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Каких подделок?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Туговато нынче с "великим и могучим".


Специфическое поведение "как бы классов" основано на одной странной особенности: у всех функций по умолчанию есть публичное, неперечислимое (см. главу 3) свойство, называемое `prototype`, которое указывает на некий объект.

Expand Down Expand Up @@ -509,7 +509,7 @@ var b = Object.create( a );
isRelatedTo( b, a ); // true
```

Внутри `isRelatedTo(..)` мы временно используем функцию `F`, меняя значение её свойства `.prototype` на объект `o2`, а затем спрашиваем, является ли `o1` "экземпляром" `F`. Ясно, что `o1` *на самом деле* не унаследован от и даже не создан с помощью `F`, поэтому должно быть понятно, что подобные приемы бессмысленны и сбивают с толку. **Проблема сводится к несуразности семантики классов, навязываемой JavaScript**, что наглядно показано на примере косвенной семантики `instanceof`.
Внутри `isRelatedTo(..)` мы временно используем функцию `F`, меняя значение её свойства `.prototype` на объект `o2`, а затем спрашиваем, является ли `o1` "экземпляром" `F`. Ясно, что `o1` *на самом деле* не унаследован и даже не создан с помощью `F`, поэтому должно быть понятно, что подобные приемы бессмысленны и сбивают с толку. **Проблема сводится к несуразности семантики классов, навязываемой JavaScript**, что наглядно показано на примере косвенной семантики `instanceof`.

Второй подход к рефлексии `[[Prototype]]` более наглядный:

Expand Down