powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Javascript. Ссылка на экземпляр.
25 сообщений из 50, страница 1 из 2
Javascript. Ссылка на экземпляр.
    #38347759
lanzer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Учебник гласит, экземпляр литерала функции или переменной является неименованным объектом, который именуется только ссылкой, которая на него ссылается.

Не пойму следующее.

window.my_function, window.my_var
- эти свойства содержат ссылки на экземпляры, или объект записан непосредственно в них?
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38347762
Фотография Малыхин Сергей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все JS ссылки и информация по этим ссылкам хранится пока на них есть хоть однин указатель
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38347767
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lanzerwindow.my_function, window.my_var
- эти свойства содержат ссылки на экземпляры, или объект записан непосредственно в них?это ссылки.

хотя, если в window.my_var хранится число или строка (в общем, простой тип), то непонятно, что там, может, и сами данные напрямую.

а функция - это объект, так что window.my_function точно будет ссылкой.
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38347860
lanzer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ладно, никто толком ни знает, если по чесноку.

Качайте учебник "Дэвид Флэнаган. Javascript. Подробное руководство. 6-е издание" .pdf. После убогого псевдоучебника на javascript.ru, который только и оставляет непонятки, этот как бальзам на душу.
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38348216
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lanzerЛадно, никто толком ни знает, если по чесноку.

Качайте учебник "Дэвид Флэнаган. Javascript. Подробное руководство. 6-е издание" .pdf. После убогого псевдоучебника на javascript.ru, который только и оставляет непонятки, этот как бальзам на душу.
Я так понял Вы нашли там ответ на ваш вопрос, не могли бы вы его процитировать?
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38348280
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lanzerЛадно, никто толком ни знает, если по чесноку.
Храброе заявление.

lanzerНе пойму следующее.

window.my_function, window.my_var
- эти свойства содержат ссылки на экземпляры, или объект записан непосредственно в них?
Если речь идет об объектах, то в переменных хранятся только ссылки на тот объект.
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38349300
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lanzerУчебник гласит, экземпляр литерала функции или переменной является неименованным объектом, который именуется только ссылкой, которая на него ссылается.

Не пойму следующее.

window.my_function, window.my_var
- эти свойства содержат ссылки на экземпляры, или объект записан непосредственно в них?


Блин. Всегда удивлялся таким формулировкам. Иногда складывается впечатление, что люди, которые пишут книги по программированию начинают забывать русский язык и дабы это скрыть пишут так, что бы всё-ровно никто ничего не понял.

По сути вопроса. в js как и в любом языке есть простые типы и сложные. Всё, что относится к сложным типам в js считается объектом (массив, функция, объект). Остальные типы, не являющиеся потомками перечисленных являются простыми.
Так вот, все значения сложных типов передаются не по значению, а по ссылке, то есть передача в функцию, присвоение a=b и др. операции, не ведут к копированию данного значения по новому адресу, а всего лишь создают новые ссылки на уже существующее значение. А значит, если в переменной лежит объект, функция или массив - то физически в переменной лежит просто ссылка на значение. Если же в ней значение любого другого типа - тогда оно физически лежит в самой переменной.
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38349489
lanzer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше всех ответил Программер :)
Программер, как всегда даете грамотный ответ не в первый раз. Большое спасибо.

авторЯ так понял Вы нашли там ответ на ваш вопрос, не могли бы вы его процитировать?
Программер все объяснил. Но книжку все равно читайте.
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38349490
Фотография Паганель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lanzerавторЯ так понял Вы нашли там ответ на ваш вопрос, не могли бы вы его процитировать?
Программер все объяснил. Но книжку все равно читайте.Значит цитаты не будет. Жаль
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38349508
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрЕсли же в ней значение любого другого типа - тогда оно физически лежит в самой переменной.рискну предположить, что строки, будучи по классификации "простым типом", всё-таки являются объектами, и var str = "aaa" будет ссылкой. Только не совсем ясно, ссылкой на что именно - либо просто на начало массива с символами, либо на какой-то промежуточный объект (в котором хранится этот массив плюс вспомогательные данные). Истина скрыта в глубинах движка.

Т.е. вряд ли var str2 = str приведет к физическому копированию всей строки (в отличии, например, от чисел и булов, где это разумно).
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38349524
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечПрограмёрЕсли же в ней значение любого другого типа - тогда оно физически лежит в самой переменной.рискну предположить, что строки, будучи по классификации "простым типом", всё-таки являются объектами, и var str = "aaa" будет ссылкой. Только не совсем ясно, ссылкой на что именно - либо просто на начало массива с символами, либо на какой-то промежуточный объект (в котором хранится этот массив плюс вспомогательные данные). Истина скрыта в глубинах движка.

Т.е. вряд ли var str2 = str приведет к физическому копированию всей строки (в отличии, например, от чисел и булов, где это разумно).

Приведёт. Со строками вообще всё конечно сложно. Но...
В js есть тип String (если не ошибаюсь так), который является объектом. А есть обычная строка, которая является просто последовательностью символов. Так вот, единственная хитрость, которая может быть вшита внутрь движка - это механизм copy-on-write (когда значение копируется в момент изменения). Но в итоге внешне мы не заметим разницы между копировании сразу и копировании при изменении.
То есть я рассуждаю так, есть код:
Код: javascript
1.
2.
3.
var str = "hello";
var str2 = str; //теперь str2 = "hello"
str2[1]="a"; //str2 = "hallo", str = "hello"


Если бы в str и str2 лежала бы ссылка на строку (получается на одну и ту же строку), то изменение str2 привело бы к изменению str. А раз этого не происходит, значит в какой-то момент происходит копирование значения по новому адресу.

Вроде так... Но если ошибаюсь где - поправьте :)
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38349529
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во многих платформах (.net, java, javascript) строки являются immutable для оптимизации. Это значит, что строка существует как незменяемый объект в едином буфере строк, а все переменные ссылаются на нужный экземпляр. Работает тот же GC, когда неиспользуемые строки освобождают память. Строку нельзя изменить, её можно только создать с новым значением. Т.е. даже при операции str+="a" создается новая строка и ссылка на неё присваивается переменной. Именно поэтому операции изменения строк в цикле считаются неэффективными и для того же JS рекомендуется собирать строку в массиве с последующим вызовом join - тогда новая строка будет создана один раз в самом конце.
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38349538
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёр
Код: javascript
1.
str2[1]="a"; //str2 = "hallo"

эксперименты показывают, что это не так. )
строку нельзя менять присваиванием символа (а в IE даже нельзя узнать значение str2[1], требуется str2.charAt(1))
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38349653
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечПрограмёр
Код: javascript
1.
str2[1]="a"; //str2 = "hallo"

эксперименты показывают, что это не так. )
строку нельзя менять присваиванием символа (а в IE даже нельзя узнать значение str2[1], требуется str2.charAt(1))

Жееесть. Это невозможно.... То есть я проверил, и оказалось что Вы правы.
Но что за бред, почему интерпретатор ошибку не выплюнул? Я то проверял только str, что бы доказать, что она равна "hello".
А много таких конструкций в данном языке, которые ничего не делают? :)

Так, по поводу ссылок... По поводу js есть поправка. То есть js всего лишь имитирует простые типы данных. Если рассматривать физическое устройство хранения тех же int, float, boolean, string и т.д., то всё это является объектами внутри :). то есть alert(myVar.constructor) для любой переменной выводит её конструктор. А то есть физически получается на всё в переменных хранятся именно ссылки. Но имитируя простые типы js просто получается копирует объекты при изменении.
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38349695
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёрто есть физически получается на всё в переменных хранятся именно ссылки. Но имитируя простые типы js просто получается копирует объекты при изменении.
Это для конечного программирования не важно. Достаточно правильно делить на "примитивы" и "объекты".
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38349709
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaПрограмёрто есть физически получается на всё в переменных хранятся именно ссылки. Но имитируя простые типы js просто получается копирует объекты при изменении.
Это для конечного программирования не важно. Достаточно правильно делить на "примитивы" и "объекты".

да да... именно об этом я и говорил в первом сообщении. А вот прошлое дополнил просто во избежания разногласий с Яростный Меч, ведь по сути он тоже прав (говоря что строка - это также объект) :)
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38349728
зыВо многих платформах (.net, java, javascript) строки являются immutable для оптимизации. Это значит, что строка существует как незменяемый объект в едином буфере строк, а все переменные ссылаются на нужный экземпляр. Работает тот же GC, когда неиспользуемые строки освобождают память. Строку нельзя изменить, её можно только создать с новым значением. Т.е. даже при операции str+="a" создается новая строка и ссылка на неё присваивается переменной. Именно поэтому операции изменения строк в цикле считаются неэффективными и для того же JS рекомендуется собирать строку в массиве с последующим вызовом join - тогда новая строка будет создана один раз в самом конце.Сведения устаревшие. Поск конкат строк в цикле самая "нативная" для больш программистов, все ведущие движки серьезно над ней поработали.
Прим год назад спец проводили исслед (сбор инфи и некот тесты), чтобы для себя закрыть этот вопрос. Вот , наприм.
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38349852
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёрпрошлое дополнил просто во избежания разногласий с Яростный Меч, ведь по сути он тоже прав (говоря что строка - это также объект) :)
Вот тут лучше про такое "забыть"...

Поскольку со строкой прокатит такое

Код: javascript
1.
2.
3.
var a='test';
var b='test';
alert(a==b);


А с "настоящим" объектом - нет.
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38350025
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsaПрограмёрпрошлое дополнил просто во избежания разногласий с Яростный Меч, ведь по сути он тоже прав (говоря что строка - это также объект) :)
Вот тут лучше про такое "забыть"...

Поскольку со строкой прокатит такое

Код: javascript
1.
2.
3.
var a='test';
var b='test';
alert(a==b);


А с "настоящим" объектом - нет.

Это да. Но теперь не даёт покоя другое. почему всё же str[1]="a" не производит никаких изменений, но при этом не выдаёт ошибок. Ведь любой, кто придёт из того же паскаля (делфи) как и я, будет думать что код рабочий, даже не подозревая, что данная инструкция не выполняет вообще ничего. Так же не должно быть: или интерпретатор делает то, о чём его просят, или же он сообщает что не может сделать того, о чём попросили... А тут он ничего ни делает и никак об этом не осведомляет программиста.
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38350097
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПрограмёрНо теперь не даёт покоя другое. почему всё же str[1]="a" не производит никаких изменений
Потому как неможет...

Програмёрно при этом не выдаёт ошибок
А вот это конечно зря...
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38350107
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Програмёрно при этом не выдаёт ошибок
Потому как таки "массив".

Код: javascript
1.
2.
3.
4.
5.
6.
var a='test';
a[1]='X';
a['tmp']='E';
alert(a[1]);
alert(a[2]);
alert(a.tmp);
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38350141
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa
Код: javascript
1.
2.
3.
a['tmp']='E';
...
alert(a.tmp);

кстати, в алерте выскочит undefined
Подробности тут
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38350183
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38350198
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Мечkrvsa
Код: javascript
1.
2.
3.
a['tmp']='E';
...
alert(a.tmp);

кстати, в алерте выскочит undefined
Подробности тут

ссылка полезная, сенкс...
Но это сколько, простите, надо было выкурить, что бы такое сделать?
То есть, a[1] = "X" создаёт объект-обёртку для строки a, и в свойство ['1'] этого объекта заносит значение "X". А по окончанию данного действия (присваивания данного свойства) удаляет изменённый объект и таким образом оставляет строку без изменений.
Теперь стало понятно почему так... Но новый вопрос... ЗАЧЕМ??!!!
Вообще зачем примитивы оборачивать в объекты (причём скрыто)? Может у разрабов реально была причина на то... Тогда было бы очень интересно узнать для чего. Буду очень благодарен, если кто ссылочку кинет или расскажет.
...
Рейтинг: 0 / 0
Javascript. Ссылка на экземпляр.
    #38350210
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Мечв алерте выскочит undefined
Да.
Потому как не объект. Т.е. не
Код: javascript
1.
new Object();
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 1 из 2
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Javascript. Ссылка на экземпляр.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]