Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   синтаксис, вопрос (https://javascript.ru/forum/misc/27595-sintaksis-vopros.html)

macdack 18.04.2012 13:20

синтаксис, вопрос
 
почему при вызове свойства length используется синтаксис как при обращении к свойству объекта

str = "привет"
alert(str.length)

obj = {"length": "пока"}
alert(obj.length)

// при этом не возможно изменить это свойство:    str.length = 1
//но возможно:
obj.length = 1


не правильно ли называть это не свойством строки а ее методом
то есть str.length это вызов метода, возвращающего длину, но не способного принять значение извне

Kolyaj 18.04.2012 13:23

Потому что идёт обращение к свойству объекта.

macdack 18.04.2012 13:55

почему же невозможно изменить это свойство как свойство любого объекта

я говорю что это скорее метод, потому что ведет себя как метод

zebra 18.04.2012 13:58

у массива length readonly

Kolyaj 18.04.2012 14:00

Цитата:

После создания объекта String это свойство остаётся неизменным. Оно обладает свойствами { DontEnum, DontDelete, ReadOnly }.
http://javascript.ru/ecma/part15#a-15.5.5.1

macdack 18.04.2012 14:08

Цитата:

Сообщение от zebra (Сообщение 169715)
у массива length readonly

строка не массив
же

macdack 18.04.2012 14:14

nasqad -1

macdack 18.04.2012 14:32

почему уже оба говорят что массив?

lenght массива можно менять

bes 18.04.2012 17:41

Цитата:

Сообщение от macdack
почему при вызове свойства length используется синтаксис как при обращении к свойству объекта

Синтаксис один и тот же как для свойств, так и для методов - точечный (обычно применяется для объектов, а строки, также как и массивы, являются объектами javascript).

Вопрос в том, сделать ли длину строки её свойством или её методом.
Обычно свойства представляют в программе данные, методы - действия над данными.
Длина строки (количество символов в строке) - это данные, характеризующие строку, поэтому логичнее считать это свойством (возвращение длины строки считать методом, с этой точки зрения, нелогично, так как никаких действий над данными в этом случае не осуществляется, данные просто становятся доступными для использования).

Про то, что вы не можете изменять длину строки путём её прямой установки при помощи оператора присваивания, вам уже ответили - данное свойство доступно только для чтения и, следовательно, недоступно для записи.

Да, строки удобно рассматривать как одномерный массив символов, но это не обозначает, что строки обязаны быть в прямом смысле массивами, это вопрос стандарта языка.
Если хотите это изменить, вот два варианта:
1) обратитесь в W3C и убедите их это изменить
2) сделайте свой стандарт языка (в котором length доступно для записи), создайте поддерживающий его интерпретатор и браузер с этим интерпретатором и продвиньте свои продукты на мировом рынке).

macdack 19.04.2012 13:08

понял спасибо

просто когда читал учебник не запомнилось что некоторые свойства только для чтения


Часовой пояс GMT +3, время: 18:10.