Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DOM (HTML) Element в IE - от кого наследуется? 
:(
    Опции темы
AKS
Дата 11.1.2008, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(ksnk @  11.1.2008,  11:30 Найти цитируемый пост)
В этом случае конструкция x+=чего-то там должна бы, по идее, изменить этот самый x

С какой стати? Вы ведь присвоили новое значение "копии" и ее же вернули. С объектом будет тоже самое, если возвращать новое значение, и не то же самое, если изменить знание "копии" (и, соответственно, оригинала):
Код

var x = [1, 2];

function F(y) {
    return y.concat(3);
};

function S(y) {
    y.push(3);
};

F(x);

alert(x); // изменилось? нет, конечно

S(x);

alert(x); // а теперь?


Добавлено через 5 минут и 14 секунд
Цитата(dsCode @  11.1.2008,  11:37 Найти цитируемый пост)
А вот со строками получается new String('test') будет сравниваться с меньшими затратами, чем 'test'. 

Не сразу понял, о каких затратах речь. smile 
Получается, что так. Если переменные указывают на объекты, то при их сравнении движок просто "полюбопытствует" - на одни объект указывают ссылки или нет. А вот чтобы сравнить их значения, придется "вынимать" эти значения из объектов.

Добавлено через 11 минут и 39 секунд
Цитата(dsCode @  11.1.2008,  11:37 Найти цитируемый пост)
...первые два пункта и так всегда были ясны (это в каждой книжке по программированию пишут, не знаю, как насчет JavaScript, но думаю, эту идеологию они тоже вполне поддержали)...

Мне тоже они казались совершенно очевидными, а вот оказалось так, что сформулировать знания не смог. smile

PM MAIL   Вверх
ksnk
Дата 11.1.2008, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Цитата(AKS @  11.1.2008,  11:42 Найти цитируемый пост)
 Вы ведь присвоили новое значение "копии" и ее же вернули

x в моем примере по вашим словам - ссылка, а не копия...

Добавлено @ 12:18
Видимо, разумнее будет считать, что строки передаются "хитрым" образом... Типа по ссылке, но при изменении тут-же строится копия этой самой строки... smile В общем - чтобы не заморачиваться с излишней "хитростью", можно вчерне считать, что по значению...

Это сообщение отредактировал(а) ksnk - 11.1.2008, 12:19


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
ksnk
Дата 11.1.2008, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



AKS, с примером я действительно лоханулся... у String'а, оказывается даже нет методов, изменяющих самого себя...

Это сообщение отредактировал(а) ksnk - 11.1.2008, 13:05


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
AKS
Дата 11.1.2008, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(ksnk @  11.1.2008,  12:14 Найти цитируемый пост)
Видимо, разумнее будет считать, что строки передаются "хитрым" образом... 

Кстати, заодно отвечая и на это:
Цитата(dsCode @  11.1.2008,  11:37 Найти цитируемый пост)
смущало лишь то, что идентификатор затирается (переписывается новым значением), а старое значение остается в памяти, т.к. есть ссылки. 

могу написать следующее (на примере вашей var y=function(x){return x+=' one more string'};).
Давайте "разглядим", что такое x внутри функции. X - это ведь уже и не аргумент, это свойство variable object:
Цитата

10.1.3 Variable Instantiation:
..for each formal parameter, as defined in the FormalParameterList, create a property of the
variable object whose name is the Identifier...

Можно предположить, что выглядит это так:
Код

VO.x = x

Итак, создано св-во, значением которого является ссылка на строку. А что происходит далее? А происходит то, что Вы присваиваете этому св-ву новое значение:
Код

VO.x = VO.x + something;

При этом сама оригинальная ссылка, которая "очутилась" в функции в качестве аргумента, к этим изменениям не имеет никакого отношения. Есть доступ только к св-ву variable object, и до тех пор, пока св-во тождественно ссылке, посредством этого св-ва можно было "управлять" тем, на что указывает ссылка (т.е. менять какие-нибудь св-ва объекта). 
Вот так я себе это представляю.
Вообще, про функции пишут, что все им передается по значению. Если это ссылка, то передается именно значение ссылки, вместо того значения, на которое указывает ссылка. Но мне кажется, все равно, как там и что передается. И я уже объяснил почему - потому что манипулировать мы можем лишь св-вами variable object. Присвоив новое значение мы просто-напросто теряем связь с оригинальным значением.

Цитата(ksnk @  11.1.2008,  12:58 Найти цитируемый пост)
... у String'а, оказывается даже нет методов, изменяющих самого себя...

И поэтому непонятно, как доказать, что строки не копируются, как числа или булевы значения, а копируются ссылки на их значения, созданные единожды.
Вообще, я ведь только пересказал то, что пишут разработчики.

PM MAIL   Вверх
cruelangel
Дата 11.1.2008, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 4
Всего: 8



1. примитивные значения передаются и присваиваются по значению
2. комплексные объекты - по ссылке

что тут может быть непонятно?  smile 
PM MAIL   Вверх
solenko
Дата 11.1.2008, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 9
Всего: 67



А в JavaScript есть примитивные значения?


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
dsCode
Дата 11.1.2008, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 565
Регистрация: 8.9.2007
Где: Saint-Petersburg

Репутация: 19
Всего: 26



Цитата(cruelangel @  11.1.2008,  17:52 Найти цитируемый пост)
1. примитивные значения передаются и присваиваются по значению
2. комплексные объекты - по ссылке

что тут может быть непонятно?

всем все понятно, с чего ты взял? smile

Цитата(solenko @  11.1.2008,  18:07 Найти цитируемый пост)
А в JavaScript есть примитивные значения? 


Код

var a = 1;
a.b = 2;
alert(a.b);

var c = new Number(1);
c.b = 2;
alert(c.b);



--------------------
the .code inside
:my music
PM MAIL WWW ICQ Jabber   Вверх
AKS
Дата 11.1.2008, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(cruelangel @  11.1.2008,  17:52 Найти цитируемый пост)
что тут может быть непонятно?  

Вы, судя по всему, спрашиваете о том, чего именно не поняли Вы? Что ж, я Вам отвечу. Мы с ksnk полдня обсуждали тот факт, что строки копируются и передаются by reference

Copying, Passing, and Comparing Data:
Цитата

…strings are copied and passed by reference, but are compared by value. Note that if you have two String objects (created with new String("something")), they are compared by reference, but if one or both of the values is a string value, they are compared by value.
Copying and passing strings by reference saves memory; but because you cannot change strings once they are created, it becomes possible to compare them by value. This lets you test whether two strings have the same content even if one was generated entirely separately from the other.


А Вы, несмотря ни на что, пишите, что "примитивные значения передаются и присваиваются по значению". Вы просто упустили этот момент в силу своей невнимательности или Вы несогласны с этим? 
В любом случае, прошу Вас, ради бога, избавьте нас от своих "устало-мудрых" замечаний, вроде "чего вам всем тут непонятно".
А если уж Вам все понятно (после того, как здесь все обсудили), то ответьте на вопрос - чем отличаются ваши "комплексные объекты" от "некомплексных"?

 
Цитата(solenko @  11.1.2008,  18:07 Найти цитируемый пост)
А в JavaScript есть примитивные значения?

Да, есть.

Цитата

4.3.2 Primitive Value

A primitive value is a member of one of the types Undefined, Null, Boolean, Number, or String. A primitive value is a datum that is represented directly at the lowest level of the language implementation.



PM MAIL   Вверх
cruelangel
Дата 11.1.2008, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 319
Регистрация: 12.9.2007

Репутация: 4
Всего: 8



> Мы с ksnk полдня обсуждали тот факт, что строки копируются и передаются by reference. 

глупость какая. в цитате просто описываются принципы ленивого копирования.


> чем отличаются ваши "комплексные объекты" от "некомплексных"?

некомплексные, они же примитивные, объекты - это строки, числа и булы, которые в спеках называются примитивными значениями, а вот действительно примитивными значениями являются null и undefined



Это сообщение отредактировал(а) cruelangel - 11.1.2008, 19:48
PM MAIL   Вверх
AKS
Дата 11.1.2008, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(cruelangel @  11.1.2008,  19:47 Найти цитируемый пост)
некомплексные, они же примитивные, объекты - это строки, числа и булы, которые в спеках называются примитивными значениями, а вот действительно примитивными значениями являются null и undefined

Да-а-а... 
Что тут сказать? Я сам виноват – расслабился, забыл то, с кем имею честь.
А ведь следовало бы помнить, хотя бы по теме намбер или не намбер ?. В той теме, блуждая в трех соснах, Вы, тем не менее, с завидным упорством утверждали, что вообще нет примитивов, а есть лишь объекты. То, что Вам ответил Zeroglif, будет очень кстати и в этой теме:
Цитата(Zeroglif @  14.10.2007,  22:58 Найти цитируемый пост)
тут речь идёт о едином для всех, но не признаваемым тобой, стандарте языка, который описал типы и обозначил поведение и алгоритмы. Можно сказать, что таким образом стандарт "отмазывается" от фантазёров и анархистов всех мастей, плодящих свои собственные виртуальные миры и смыслы...  smile 

Так вот, возвращаясь к тому, что прописано в ECMAScript Language Specification Edition 3, и добавляя к тому, что уже цитировал из спецификации в предыдущем сообщении, отмечу следующее. Есть четко сформулированные алгоритмы, например:
Цитата

15.5.1 The String Constructor Called as a Function
When String is called as a function rather than as a constructor, it performs a type conversion.
15.5.1.1 String ( [ value ] )
Returns a string value (not a String object) computed by ToString(value). If value is not supplied, the empty string "" is returned.

15.6.1 The Boolean Constructor Called as a Function
When Boolean is called as a function rather than as a constructor, it performs a type conversion.
15.6.1.1 Boolean (value)
Returns a boolean value (not a Boolean object) computed by ToBoolean(value).

15.7.1 The Number Constructor Called as a Function
When Number is called as a function rather than as a constructor, it performs a type conversion.
15.7.1.1 Number ( [ value ] )
Returns a number value (not a Number object) computed by ToNumber(value) if value was supplied, else returns +0.

в которых явно описывается конвертация в примитивное значение (не объект!!!). Также есть, например, value properties of the Global Object, такие как NaN или Infinity, которые изначально по определению не являются объектами. Более того, в спецификации специально описана такая абстрактная операция, как ToPrimitive, чтобы помочь разъяснить семантику языка:
Цитата

9.1 ToPrimitive
The operator ToPrimitive takes a Value argument and an optional argument PreferredType. The operator ToPrimitive converts its value argument to a non-Object type.

Все это говорит о том,  что Вы глубоко заблуждаетесь, называя объектами то, что объектами не является. Также глубочайшим вашим заблуждением является то, что Вы что-то называете комплексными/некомплексными объектами – в ECMAScript Language нет ни того, ни другого понятия. Ну и, наконец, несмотря на то, что Вам уже неоднократно объясняли суть дела, Вы по-прежнему пишите, что "...объекты - по ссылке (передаются и присваиваются)". 

Цитата(cruelangel @  11.1.2008,  19:47 Найти цитируемый пост)
глупость какая. 

Если то, что мы обсуждали, для Вас – глупость, то зачем Вы пытаетесь присоединиться к обсуждению? Только затем, чтобы назвать обсуждение глупостью? Но я ведь Вам на русском языке написал – найдите в себе силы отказаться от подобных высказываний! Произвести впечатление Вы сумеете лишь в том случае, если сможете отказаться от своей склонности к искажению фактов и от попыток прикрыть свою некомпетентность своими же досужими вымыслами и отвлеченными фантазиями.

Цитата(cruelangel @  11.1.2008,  19:47 Найти цитируемый пост)
в цитате просто описываются принципы ленивого копирования.

В цитате черным по белому сказано: strings are copied and passed by reference. Где Вы увидели описание принципа "ленивого копирования"? Узрели между строк? 

Это сообщение отредактировал(а) AKS - 11.1.2008, 22:58
PM MAIL   Вверх
egao
Дата 11.1.2008, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 6.8.2007

Репутация: -1
Всего: нет



> Так вот, возвращаясь к тому, что прописано в ECMAScript Language Specification Edition 3

эту спецификацию писали люди, которые не понимают что такое объект. 


> Где Вы увидели описание принципа "ленивого копирования"? Узрели между строк?

да.

PM MAIL   Вверх
dsCode
Дата 12.1.2008, 00:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 565
Регистрация: 8.9.2007
Где: Saint-Petersburg

Репутация: 19
Всего: 26



Цитата(egao @  11.1.2008,  23:37 Найти цитируемый пост)
эту спецификацию писали люди, которые не понимают что такое объект. 

 smile

/** удаленный текст smile */

Это сообщение отредактировал(а) dsCode - 12.1.2008, 00:19


--------------------
the .code inside
:my music
PM MAIL WWW ICQ Jabber   Вверх
egao
Дата 12.1.2008, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 6.8.2007

Репутация: -1
Всего: нет



улыбайтесь - это всех раздражает  smile 
PM MAIL   Вверх
AKS
Дата 12.1.2008, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата(egao @  11.1.2008,  23:37 Найти цитируемый пост)
эту спецификацию писали люди, которые не понимают что такое объект. 

Хорошо. Давайте представим, что ваши заявления верны и ученые степени тех, кто писал ECMAScript Language Specification, не позволяют им осознать в полной мере, что такое объект в информатике. Они-то, будучи людьми весьма приземленными (т.е. "зашибленными" парадигмой объектно-ориентированного программирования), наивно полагают, что объект – это всего-навсего экземпляр какого-либо класса (конструктора, применительно к данному разделу). Вы, видимо, мыслите какими-то своими философскими категориями и считаете, что понятие "объект" значительно шире, чем кто-либо может себе это представить. 
Так вот у меня просьба – поделитесь хоть какой-нибудь полезной информацией на эту тему, которая бы указала нам на выход из тьмы неведения. И, пожалуйста, если это будут ссылки на статьи, пусть это будут статьи, написанные не Вами, а каким-нибудь другим автором. На самом деле, Вам давно уже надо было предложить хоть какие-то сведения в защиту своей точки зрения. А то пока получается так, что информативная ценность всех ваших сообщений равна нулю.

Цитата(egao @  11.1.2008,  23:37 Найти цитируемый пост)
> Где Вы увидели описание принципа "ленивого копирования"? Узрели между строк?

да.

Я, в общем-то, предполагал, что Вы обладаете возможностями, которых нет у других (в данном случае – это умение видеть то, что скрыто от глаз остальных участников обсуждения). Теперь понятно, почему некоторые реплики Вам кажутся глупыми.

Цитата(egao @  12.1.2008,  00:37 Найти цитируемый пост)
улыбайтесь - это всех раздражает  smile  

А на какую реакцию Вы рассчитывали? Заявляя о том, что здесь пишут глупости, о том, что авторы языка программирования ничего не знают об объектах, Вы должны были ожидать нечто подобное. Лично я не удивляюсь, если кто-нибудь напишет, что он вообще чуть не умер от смеха, читая Ваши высказывания.


Это сообщение отредактировал(а) AKS - 12.1.2008, 10:27
PM MAIL   Вверх
egao
Дата 13.1.2008, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 6.8.2007

Репутация: -1
Всего: нет



PM MAIL   Вверх
Страницы: (5) Все 1 2 [3] 4 5 
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1033 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.