Как получилось, что метод toString () не нуждается в объекте? - PullRequest
1 голос
/ 11 мая 2019

Чем глубже я погружаюсь в программирование, тем более старые концепции, которые, как я думал, я знал, смущают меня.Например, метод toString ().Почему я могу применить этот метод к переменной, которая не является объектом?Это потому, что toString () - это встроенный метод javascript, который может применяться ко всем типам данных?

Ответы [ 3 ]

3 голосов
/ 11 мая 2019

Почти все является объектом в JavaScript.То, что вы называете примитивами (строки, числа и т. Д.), Имеет методы:

console.log("Message".toUpperCase());
console.log(123.toString());

Таким образом, причина, по которой вы можете применить toString к чему угодно - даже если это не похоже на объект - в том, что все действительно является своего рода объектом, что означаету него могут быть методы.Вот несколько примеров toString для разных вещей:

console.log(123..toString());
console.log(["A", "B", "C"].toString());
console.log(typeof true.toString());
2 голосов
/ 11 мая 2019

Существует несколько видов toString методов.Существует Object.prototype.toString, который любой объект унаследует.Также есть Number.prototype.toString, Boolean.prototype.toString и String.prototype.toString.

Когда вы делаете

'foo'.toString()

, вы фактически вызываете String.prototype.toString - вы не вызываете Object.prototype.toString.

Object.prototype.toString = () => 'changed';
console.log('foo'.toString());

Хотя строки и другие вещи могут интерпретироваться как объекты, и для них вызывается Object.prototype.toString, часто вы просто вызываете специфичный для примитива метод, такой как Boolean.prototype.toString или String.prototype.toString.(Эти прототипы do наследуются от Object.prototype, но метод Object.prototype.toString затеняется более близким методом-прототипом и может даже не рассматриваться)

Почему этиметоды существуют для этих примитивов?Вероятно, ради последовательности.Если у вас есть что-то, что не undefined или null, вы будете знать, что сможете позвонить на toString.

0 голосов
/ 11 мая 2019

Вы должны узнать о «наследовании прототипа».По моему мнению, это одна из самых важных концепций языка javascript.

Приведенные выше ответы верны, но вы не поймете, что они означают, пока не потратите время на изучение этого предмета..

Надеюсь, что это поможет вам!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...