Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 19.04.2012, 14:51
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Maxmaxmахimus,
Непонятно, о чём пример.

var string = "привет";
 
alert(string.foo);
string.foo = 2;
alert(string.foo);
Ответить с цитированием
  #12 (permalink)  
Старый 19.04.2012, 15:14
Аватар для macdack
партизан, доктор
Отправить личное сообщение для macdack Посмотреть профиль Найти все сообщения от macdack
 
Регистрация: 29.06.2011
Сообщений: 221

всё же есть некоторая непоследоватльность

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

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

Сообщение от Kolyaj Посмотреть сообщение
Maxmaxmахimus,
Непонятно, о чём пример.

var string = "привет";
 
alert(string.foo);
string.foo = 2;
alert(string.foo);
кстати да

если строка это объект то по логике этот объект может иметь свойства которые можно создать и переопределить
Ответить с цитированием
  #14 (permalink)  
Старый 19.04.2012, 16:10
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

А строка и не объект
Ответить с цитированием
  #15 (permalink)  
Старый 19.04.2012, 16:13
Интересующийся
Отправить личное сообщение для Mixxx Посмотреть профиль Найти все сообщения от Mixxx
 
Регистрация: 11.04.2012
Сообщений: 20

Там строка не объект а просто строка.

Вот строка-объект:
var string = new String("привет");
alert(string.foo);
string.foo = 2;
alert(string.foo);



Хотя сдругой стороны
Сообщение от Kolyaj Посмотреть сообщение
А строка и не объект
Если строковой литерал сам по себе еще не объект типа String то как он может иметь прототип
<div id="SuperMegaID">Строка Из Дива</div>
<SCRIPT>
String.prototype.$$$=function()
{
	return document.getElementById(this)
}

alert(
            "SuperMegaID" . $$$().innerHTML
);
</SCRIPT>


Последний раз редактировалось Mixxx, 19.04.2012 в 16:24.
Ответить с цитированием
  #16 (permalink)  
Старый 19.04.2012, 16:37
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Mixxx
Если строковой литерал сам по себе еще не объект типа String то как он может иметь прототип
интерпретатор при необходимости превращает их в объекты типа string
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #17 (permalink)  
Старый 19.04.2012, 20:17
Интересующийся
Отправить личное сообщение для Mixxx Посмотреть профиль Найти все сообщения от Mixxx
 
Регистрация: 11.04.2012
Сообщений: 20

Сообщение от nerv_ Посмотреть сообщение
интерпретатор при необходимости превращает их в объекты типа string
А как "интерпритатор" определяет когда нужно превращать а когда не надо?

почему тут не превращает?
var string = "привет";
 
alert(string.foo);
string.foo = 2;
alert(string.foo);
Ответить с цитированием
  #18 (permalink)  
Старый 19.04.2012, 22:35
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от macdack Посмотреть сообщение
не правильно ли называть это не свойством строки а ее методом
то есть str.length это вызов метода, возвращающего длину, но не способного принять значение извне
это обычное свойство, у которого выставлено writable:false, enumerable:false,и configurable:false. и прикручен геттер.

var a = Object.getOwnPropertyDescriptor(new String("FOO"), "length");

var b,c = ""; for(b in a) c += b+"="+a[b]+"\n";
alert(c);


можно запилить такое же самому :

var a = {};
a["0"] = "ноль";
a["1"] = "один";
a["2"] = "два";


    Object.defineProperty(a, "length", { 
        enumerable: false,
        configurable: false,
        writeable: false,
        get: function(){ 
                for(var i = 0; i in this; i += 1) ;
                return i;
       }
    });

alert( a.length );
// заимствуем метод у массива. у нас же ARRAY-LIKE объект
Array.prototype.push.call( a, "три" );

alert(  "length: "+a.length+"\n a[3] = "+a[3]  );

Последний раз редактировалось melky, 19.04.2012 в 22:43.
Ответить с цитированием
  #19 (permalink)  
Старый 20.04.2012, 09:39
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Maxmaxmахimus
он определяет тип приметива и ищет эти свойства в прототипе приметива. кэп.
Кэп, но у примитивов нет прототипа, на то они и примитивы.
Ответить с цитированием
  #20 (permalink)  
Старый 20.04.2012, 10:31
Интересующийся
Отправить личное сообщение для Mixxx Посмотреть профиль Найти все сообщения от Mixxx
 
Регистрация: 11.04.2012
Сообщений: 20

Цитата:
у примитивов нет прототипа
Почему тогда в обоих случаях в этом примере свойство примитива string будет браться из прототипа объекта String ?
String.prototype.foo=777;
var string = "привет";
 
alert(string.foo); //777
string.foo = 2;//не перекроется
alert(string.foo);//777

Последний раз редактировалось Mixxx, 20.04.2012 в 10:35.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по 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