|
|
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
Учебник гласит, экземпляр литерала функции или переменной является неименованным объектом, который именуется только ссылкой, которая на него ссылается. Не пойму следующее. window.my_function, window.my_var - эти свойства содержат ссылки на экземпляры, или объект записан непосредственно в них? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 18:25 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
Все JS ссылки и информация по этим ссылкам хранится пока на них есть хоть однин указатель ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 18:29 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
lanzerwindow.my_function, window.my_var - эти свойства содержат ссылки на экземпляры, или объект записан непосредственно в них?это ссылки. хотя, если в window.my_var хранится число или строка (в общем, простой тип), то непонятно, что там, может, и сами данные напрямую. а функция - это объект, так что window.my_function точно будет ссылкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 18:34 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
Ладно, никто толком ни знает, если по чесноку. Качайте учебник "Дэвид Флэнаган. Javascript. Подробное руководство. 6-е издание" .pdf. После убогого псевдоучебника на javascript.ru, который только и оставляет непонятки, этот как бальзам на душу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.07.2013, 19:52 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
lanzerЛадно, никто толком ни знает, если по чесноку. Качайте учебник "Дэвид Флэнаган. Javascript. Подробное руководство. 6-е издание" .pdf. После убогого псевдоучебника на javascript.ru, который только и оставляет непонятки, этот как бальзам на душу. Я так понял Вы нашли там ответ на ваш вопрос, не могли бы вы его процитировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 10:38 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
lanzerЛадно, никто толком ни знает, если по чесноку. Храброе заявление. lanzerНе пойму следующее. window.my_function, window.my_var - эти свойства содержат ссылки на экземпляры, или объект записан непосредственно в них? Если речь идет об объектах, то в переменных хранятся только ссылки на тот объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 11:17 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
lanzerУчебник гласит, экземпляр литерала функции или переменной является неименованным объектом, который именуется только ссылкой, которая на него ссылается. Не пойму следующее. window.my_function, window.my_var - эти свойства содержат ссылки на экземпляры, или объект записан непосредственно в них? Блин. Всегда удивлялся таким формулировкам. Иногда складывается впечатление, что люди, которые пишут книги по программированию начинают забывать русский язык и дабы это скрыть пишут так, что бы всё-ровно никто ничего не понял. По сути вопроса. в js как и в любом языке есть простые типы и сложные. Всё, что относится к сложным типам в js считается объектом (массив, функция, объект). Остальные типы, не являющиеся потомками перечисленных являются простыми. Так вот, все значения сложных типов передаются не по значению, а по ссылке, то есть передача в функцию, присвоение a=b и др. операции, не ведут к копированию данного значения по новому адресу, а всего лишь создают новые ссылки на уже существующее значение. А значит, если в переменной лежит объект, функция или массив - то физически в переменной лежит просто ссылка на значение. Если же в ней значение любого другого типа - тогда оно физически лежит в самой переменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 18:37 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
Лучше всех ответил Программер :) Программер, как всегда даете грамотный ответ не в первый раз. Большое спасибо. авторЯ так понял Вы нашли там ответ на ваш вопрос, не могли бы вы его процитировать? Программер все объяснил. Но книжку все равно читайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 22:33 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
lanzerавторЯ так понял Вы нашли там ответ на ваш вопрос, не могли бы вы его процитировать? Программер все объяснил. Но книжку все равно читайте.Значит цитаты не будет. Жаль ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 22:36 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
ПрограмёрЕсли же в ней значение любого другого типа - тогда оно физически лежит в самой переменной.рискну предположить, что строки, будучи по классификации "простым типом", всё-таки являются объектами, и var str = "aaa" будет ссылкой. Только не совсем ясно, ссылкой на что именно - либо просто на начало массива с символами, либо на какой-то промежуточный объект (в котором хранится этот массив плюс вспомогательные данные). Истина скрыта в глубинах движка. Т.е. вряд ли var str2 = str приведет к физическому копированию всей строки (в отличии, например, от чисел и булов, где это разумно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 23:06 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
Яростный МечПрограмёрЕсли же в ней значение любого другого типа - тогда оно физически лежит в самой переменной.рискну предположить, что строки, будучи по классификации "простым типом", всё-таки являются объектами, и var str = "aaa" будет ссылкой. Только не совсем ясно, ссылкой на что именно - либо просто на начало массива с символами, либо на какой-то промежуточный объект (в котором хранится этот массив плюс вспомогательные данные). Истина скрыта в глубинах движка. Т.е. вряд ли var str2 = str приведет к физическому копированию всей строки (в отличии, например, от чисел и булов, где это разумно). Приведёт. Со строками вообще всё конечно сложно. Но... В js есть тип String (если не ошибаюсь так), который является объектом. А есть обычная строка, которая является просто последовательностью символов. Так вот, единственная хитрость, которая может быть вшита внутрь движка - это механизм copy-on-write (когда значение копируется в момент изменения). Но в итоге внешне мы не заметим разницы между копировании сразу и копировании при изменении. То есть я рассуждаю так, есть код: Код: javascript 1. 2. 3. Если бы в str и str2 лежала бы ссылка на строку (получается на одну и ту же строку), то изменение str2 привело бы к изменению str. А раз этого не происходит, значит в какой-то момент происходит копирование значения по новому адресу. Вроде так... Но если ошибаюсь где - поправьте :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 23:31 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
Во многих платформах (.net, java, javascript) строки являются immutable для оптимизации. Это значит, что строка существует как незменяемый объект в едином буфере строк, а все переменные ссылаются на нужный экземпляр. Работает тот же GC, когда неиспользуемые строки освобождают память. Строку нельзя изменить, её можно только создать с новым значением. Т.е. даже при операции str+="a" создается новая строка и ссылка на неё присваивается переменной. Именно поэтому операции изменения строк в цикле считаются неэффективными и для того же JS рекомендуется собирать строку в массиве с последующим вызовом join - тогда новая строка будет создана один раз в самом конце. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2013, 23:46 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
Програмёр Код: javascript 1. эксперименты показывают, что это не так. ) строку нельзя менять присваиванием символа (а в IE даже нельзя узнать значение str2[1], требуется str2.charAt(1)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 00:31 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
Яростный МечПрограмёр Код: javascript 1. эксперименты показывают, что это не так. ) строку нельзя менять присваиванием символа (а в IE даже нельзя узнать значение str2[1], требуется str2.charAt(1)) Жееесть. Это невозможно.... То есть я проверил, и оказалось что Вы правы. Но что за бред, почему интерпретатор ошибку не выплюнул? Я то проверял только str, что бы доказать, что она равна "hello". А много таких конструкций в данном языке, которые ничего не делают? :) Так, по поводу ссылок... По поводу js есть поправка. То есть js всего лишь имитирует простые типы данных. Если рассматривать физическое устройство хранения тех же int, float, boolean, string и т.д., то всё это является объектами внутри :). то есть alert(myVar.constructor) для любой переменной выводит её конструктор. А то есть физически получается на всё в переменных хранятся именно ссылки. Но имитируя простые типы js просто получается копирует объекты при изменении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 09:51 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
Програмёрто есть физически получается на всё в переменных хранятся именно ссылки. Но имитируя простые типы js просто получается копирует объекты при изменении. Это для конечного программирования не важно. Достаточно правильно делить на "примитивы" и "объекты". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 10:20 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
krvsaПрограмёрто есть физически получается на всё в переменных хранятся именно ссылки. Но имитируя простые типы js просто получается копирует объекты при изменении. Это для конечного программирования не важно. Достаточно правильно делить на "примитивы" и "объекты". да да... именно об этом я и говорил в первом сообщении. А вот прошлое дополнил просто во избежания разногласий с Яростный Меч, ведь по сути он тоже прав (говоря что строка - это также объект) :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 10:30 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
зыВо многих платформах (.net, java, javascript) строки являются immutable для оптимизации. Это значит, что строка существует как незменяемый объект в едином буфере строк, а все переменные ссылаются на нужный экземпляр. Работает тот же GC, когда неиспользуемые строки освобождают память. Строку нельзя изменить, её можно только создать с новым значением. Т.е. даже при операции str+="a" создается новая строка и ссылка на неё присваивается переменной. Именно поэтому операции изменения строк в цикле считаются неэффективными и для того же JS рекомендуется собирать строку в массиве с последующим вызовом join - тогда новая строка будет создана один раз в самом конце.Сведения устаревшие. Поск конкат строк в цикле самая "нативная" для больш программистов, все ведущие движки серьезно над ней поработали. Прим год назад спец проводили исслед (сбор инфи и некот тесты), чтобы для себя закрыть этот вопрос. Вот , наприм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 10:38 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
Програмёрпрошлое дополнил просто во избежания разногласий с Яростный Меч, ведь по сути он тоже прав (говоря что строка - это также объект) :) Вот тут лучше про такое "забыть"... Поскольку со строкой прокатит такое Код: javascript 1. 2. 3. А с "настоящим" объектом - нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 11:48 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
krvsaПрограмёрпрошлое дополнил просто во избежания разногласий с Яростный Меч, ведь по сути он тоже прав (говоря что строка - это также объект) :) Вот тут лучше про такое "забыть"... Поскольку со строкой прокатит такое Код: javascript 1. 2. 3. А с "настоящим" объектом - нет. Это да. Но теперь не даёт покоя другое. почему всё же str[1]="a" не производит никаких изменений, но при этом не выдаёт ошибок. Ведь любой, кто придёт из того же паскаля (делфи) как и я, будет думать что код рабочий, даже не подозревая, что данная инструкция не выполняет вообще ничего. Так же не должно быть: или интерпретатор делает то, о чём его просят, или же он сообщает что не может сделать того, о чём попросили... А тут он ничего ни делает и никак об этом не осведомляет программиста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 12:59 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
ПрограмёрНо теперь не даёт покоя другое. почему всё же str[1]="a" не производит никаких изменений Потому как неможет... Програмёрно при этом не выдаёт ошибок А вот это конечно зря... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 13:26 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
Програмёрно при этом не выдаёт ошибок Потому как таки "массив". Код: javascript 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 13:30 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
krvsa Код: javascript 1. 2. 3. кстати, в алерте выскочит undefined Подробности тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 13:43 |
|
||
|
Javascript. Ссылка на экземпляр.
|
|||
|---|---|---|---|
|
#18+
Яростный Мечkrvsa Код: javascript 1. 2. 3. кстати, в алерте выскочит undefined Подробности тут ссылка полезная, сенкс... Но это сколько, простите, надо было выкурить, что бы такое сделать? То есть, a[1] = "X" создаёт объект-обёртку для строки a, и в свойство ['1'] этого объекта заносит значение "X". А по окончанию данного действия (присваивания данного свойства) удаляет изменённый объект и таким образом оставляет строку без изменений. Теперь стало понятно почему так... Но новый вопрос... ЗАЧЕМ??!!! Вообще зачем примитивы оборачивать в объекты (причём скрыто)? Может у разрабов реально была причина на то... Тогда было бы очень интересно узнать для чего. Буду очень благодарен, если кто ссылочку кинет или расскажет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.07.2013, 14:09 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=38347860&tid=1448033]: |
0ms |
get settings: |
9ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
166ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 237ms |
| total: | 510ms |

| 0 / 0 |
