Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.04.2012, 13:20
Аватар для macdack
партизан, доктор
Отправить личное сообщение для macdack Посмотреть профиль Найти все сообщения от macdack
 
Регистрация: 29.06.2011
Сообщений: 221

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

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

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

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


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

Последний раз редактировалось macdack, 18.04.2012 в 13:54.
Ответить с цитированием
  #2 (permalink)  
Старый 18.04.2012, 13:23
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Потому что идёт обращение к свойству объекта.
Ответить с цитированием
  #3 (permalink)  
Старый 18.04.2012, 13:55
Аватар для macdack
партизан, доктор
Отправить личное сообщение для macdack Посмотреть профиль Найти все сообщения от macdack
 
Регистрация: 29.06.2011
Сообщений: 221

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

я говорю что это скорее метод, потому что ведет себя как метод
Ответить с цитированием
  #4 (permalink)  
Старый 18.04.2012, 13:58
Профессор
Отправить личное сообщение для zebra Посмотреть профиль Найти все сообщения от zebra
 
Регистрация: 14.09.2011
Сообщений: 523

у массива length readonly
Ответить с цитированием
  #5 (permalink)  
Старый 18.04.2012, 14:00
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Цитата:
После создания объекта String это свойство остаётся неизменным. Оно обладает свойствами { DontEnum, DontDelete, ReadOnly }.
http://javascript.ru/ecma/part15#a-15.5.5.1
Ответить с цитированием
  #6 (permalink)  
Старый 18.04.2012, 14:08
Аватар для macdack
партизан, доктор
Отправить личное сообщение для macdack Посмотреть профиль Найти все сообщения от macdack
 
Регистрация: 29.06.2011
Сообщений: 221

Сообщение от zebra Посмотреть сообщение
у массива length readonly
строка не массив
же
Ответить с цитированием
  #7 (permalink)  
Старый 18.04.2012, 14:14
Аватар для macdack
партизан, доктор
Отправить личное сообщение для macdack Посмотреть профиль Найти все сообщения от macdack
 
Регистрация: 29.06.2011
Сообщений: 221

nasqad -1
Ответить с цитированием
  #8 (permalink)  
Старый 18.04.2012, 14:32
Аватар для macdack
партизан, доктор
Отправить личное сообщение для macdack Посмотреть профиль Найти все сообщения от macdack
 
Регистрация: 29.06.2011
Сообщений: 221

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

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

Последний раз редактировалось macdack, 18.04.2012 в 14:36.
Ответить с цитированием
  #9 (permalink)  
Старый 18.04.2012, 17:41
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

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

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

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

Да, строки удобно рассматривать как одномерный массив символов, но это не обозначает, что строки обязаны быть в прямом смысле массивами, это вопрос стандарта языка.
Если хотите это изменить, вот два варианта:
1) обратитесь в W3C и убедите их это изменить
2) сделайте свой стандарт языка (в котором length доступно для записи), создайте поддерживающий его интерпретатор и браузер с этим интерпретатором и продвиньте свои продукты на мировом рынке).
Ответить с цитированием
  #10 (permalink)  
Старый 19.04.2012, 13:08
Аватар для macdack
партизан, доктор
Отправить личное сообщение для macdack Посмотреть профиль Найти все сообщения от macdack
 
Регистрация: 29.06.2011
Сообщений: 221

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

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по each() и перебору строк таблицы battrack jQuery 1 09.02.2012 14:30
вопрос про возможности JS для рисования и анимации macdack Библиотеки/Тулкиты/Фреймворки 3 15.07.2011 00:13
Теоретический вопрос. gods33 (X)HTML/CSS 10 16.12.2010 23:49
Вопрос о циклических ссылках (JavaScript -> Dom -> JavaScipt) BlueIce Events/DOM/Window 10 17.02.2010 21:58
Синтаксис языка javascript multimetr Я не знаю javascript 2 26.05.2009 23:34