HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Любой метод - это функция в свойстве объекта. Когда мы вызываем метод, то вызываем функцию из свойства:</p>
1 <p>Любой метод - это функция в свойстве объекта. Когда мы вызываем метод, то вызываем функцию из свойства:</p>
2 <p>Однако JavaScript позволяет вызывать функции не только на объектах, но и на примитивных значениях:</p>
2 <p>Однако JavaScript позволяет вызывать функции не только на объектах, но и на примитивных значениях:</p>
3 <p>Из этого кода можно сделать вывод, что строка - это тоже объект. На самом деле, этот вывод ошибочный. В JavaScript строки, логические значения, null и числа реализованы как примитивные значения, то есть у них нет методов.</p>
3 <p>Из этого кода можно сделать вывод, что строка - это тоже объект. На самом деле, этот вывод ошибочный. В JavaScript строки, логические значения, null и числа реализованы как примитивные значения, то есть у них нет методов.</p>
4 <p>Во время вызова методов на примитивных значениях JavaScript автоматически упаковывает значение в объект и вызывает метод на этом объекте. После этого объект автоматически распаковывается на примитивное значение.</p>
4 <p>Во время вызова методов на примитивных значениях JavaScript автоматически упаковывает значение в объект и вызывает метод на этом объекте. После этого объект автоматически распаковывается на примитивное значение.</p>
5 <p>Для каждого примитивного типа в JavaScript есть конструктор, который создает объект из примитивного значения. Именно он и вызывается, когда происходит упаковка.</p>
5 <p>Для каждого примитивного типа в JavaScript есть конструктор, который создает объект из примитивного значения. Именно он и вызывается, когда происходит упаковка.</p>
6 <p>Чтобы разобраться в этой теме, выполним ручную упаковку на примере выше. Конструктором для строк является String:</p>
6 <p>Чтобы разобраться в этой теме, выполним ручную упаковку на примере выше. Конструктором для строк является String:</p>
7 <p>Здесь мы создали объект name и упаковали в него примитивное значение - строку 'hexlet'.</p>
7 <p>Здесь мы создали объект name и упаковали в него примитивное значение - строку 'hexlet'.</p>
8 <p>Дальше происходит распаковка примитивного значения из объекта. Для этого JavaScript вызывает на объекте метод valueOf():</p>
8 <p>Дальше происходит распаковка примитивного значения из объекта. Для этого JavaScript вызывает на объекте метод valueOf():</p>
9 <p>То же самое касается других типов:</p>
9 <p>То же самое касается других типов:</p>
10 <p>Метод valueOf() вызывается в результате разных операций над объектом:</p>
10 <p>Метод valueOf() вызывается в результате разных операций над объектом:</p>
11 <p>В примере выше мы вычислили значение number и соединили его в строку. Чтобы это сделать, мы сложили number + 0. Благодаря этому JavaScript автоматически вызвал метод valueOf() на объекте number, чтобы вычислить его значение для операции сложения.</p>
11 <p>В примере выше мы вычислили значение number и соединили его в строку. Чтобы это сделать, мы сложили number + 0. Благодаря этому JavaScript автоматически вызвал метод valueOf() на объекте number, чтобы вычислить его значение для операции сложения.</p>
12 <p>Мы можем переопределить метод valueOf():</p>
12 <p>Мы можем переопределить метод valueOf():</p>
13 <h2>Итог</h2>
13 <h2>Итог</h2>
14 <p>Когда мы вызываем методы на примитивных значениях, JavaScript автоматически упаковывает эти значения в объекты, вызывает методы и распаковывает значения обратно. Распаковка происходит не только на примитивных значениях, но и обычных объектах, когда они участвуют в вычислениях.</p>
14 <p>Когда мы вызываем методы на примитивных значениях, JavaScript автоматически упаковывает эти значения в объекты, вызывает методы и распаковывает значения обратно. Распаковка происходит не только на примитивных значениях, но и обычных объектах, когда они участвуют в вычислениях.</p>
15 <p>В этом уроке мы познакомились с методом valueOf(), который автоматически вызывается при каждой распаковке объекта.</p>
15 <p>В этом уроке мы познакомились с методом valueOf(), который автоматически вызывается при каждой распаковке объекта.</p>