@OrdeO
just......newbie

Cтрока в JS не является объектом, почему же у нее есть свойства и методы?

Учу JS c нуля, помогите развеять кое-какое недопонимание.
Строка в JS не является объектом, почему же у нее есть свойства (str.length), и методы (str.charAt(pos))?
Разве свойства и методы не присущи только объектам?
obj = {
properties: 'some properties',
method : someMethod()
}


И как в таком случае вообще различать свойства и методы?
  • Вопрос задан
  • 387 просмотров
Решения вопроса 2
Lynn
@Lynn
nginx, js, css
При обращении к свойствам примитивов создаётся временный объект соответсвующего типа и вызывается его свойство/метод. (Наверняка в движках всё гораздо сложнее и есть куча оптимизаций, но с точки зрения использования это неважно)

> И как в таком случае вообще различать свойства и методы
Никак. Методы это просто свойства-функции.
Ответ написан
Комментировать
nikolayshabalin
@nikolayshabalin
Автор профессиональных курсов в HTML Academy
Стро­ки не яв­ля­ют­ся объ­ек­та­ми, так по­че­му же они об­ла­да­ют свой­ст­ва­ми?
Вся­кий раз ко­гда в про­грам­ме пред­при­ни­ма­ет­ся по­пыт­ка об­ра­тить­ся к свой­ст­ву
стро­ки s, ин­тер­пре­та­тор Ja­va­Script пре­об­ра­зу­ет стро­ко­вое зна­че­ние в объ­ект, как
ес­ли бы был вы­пол­нен вы­зов new String(s). Этот объ­ект на­сле­ду­ет
стро­ко­вые ме­то­ды и ис­поль­зу­ет­ся ин­тер­пре­та­то­ром для дос­ту­па к свой­ст­вам.
По­сле об­ра­ще­ния к свой­ст­ву вновь соз­дан­ный объ­ект унич­то­жа­ет­ся.
(От реа­ли­за­ций не тре­бу­ет­ся фак­ти­че­ски соз­да­вать и унич­то­жать этот про­ме­жу­точ­ный объ­ект,
но они долж­ны вес­ти се­бя так, как ес­ли бы объ­ект дей­ст­ви­тель­но соз­да­вал­ся
и унич­то­жал­ся.)
На­ли­чие ме­то­дов у чи­сло­вых и ло­ги­че­ских зна­че­ний объ­яс­ня­ет­ся те­ми же при­чи­на­ми:
при об­ра­ще­нии к ка­ко­му-ли­бо ме­то­ду соз­да­ет­ся вре­мен­ный объ­ект вы­зо­вом
кон­ст­рук­то­ра Number() или Boolean(), по­сле че­го про­из­во­дит­ся вы­зов ме­то­да
это­го объ­ек­та. Зна­че­ния null и undefined не име­ют объ­ек­тов-обер­ток: лю­бые по­пыт­ки
об­ра­тить­ся к свой­ст­вам этих зна­че­ний бу­дет вы­зы­вать ошиб­ку TypeError.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы