Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #81 (permalink)  
Старый 26.03.2015, 10:30
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Я не буду с тобой препираться более в этой теме. Это скучно. Можешь снова считать что ты победил.
newuser1001 - 100
tsigel - 0
Ответить с цитированием
  #82 (permalink)  
Старый 26.03.2015, 10:34
Аспирант
Посмотреть профиль Найти все сообщения от newuser1001
 
Регистрация: 24.03.2015
Сообщений: 92

Сообщение от tsigel
ты победил.
с тобой это априори
Ответить с цитированием
  #83 (permalink)  
Старый 30.03.2015, 00:11
Кандидат Javascript-наук
Отправить личное сообщение для jaroslav.tavgen Посмотреть профиль Найти все сообщения от jaroslav.tavgen
 
Регистрация: 18.09.2014
Сообщений: 128

Пытаюсь ещё раз понять:

Сообщение от tsigel Посмотреть сообщение
Это вообще 2 разных случая. Ещё раз. Если сейчас не поймете - прочтите ЦЕЛИКОМ статью которую я кинул.

Вот Ваш код:
<div id="id1" onclick="Function1()">Click on me</div>
<script>
"use strict"
var id1 = document.getElementById("id1");
id1.outerHTML = id1.outerHTML.replace('onclick="Function1()"', 'onclick="Function2()"');

alert(id1.outerHTML);

function Function1(){

    alert('Function1 is executed!');

}

function Function2(){

    alert('Function2 is executed!');

}


</script>


В строке 4 вы записали в переменную "id1" ссылку на елемент.
Да. Это значит, что теперь переменная id1 - это адрес объекта document.getElementById("id1"). А значит (поскольку указателей в javascript нету) каждый раз когда я обращаюсь к переменной id1, я работаю НАПРЯМУЮ с объектом document.getElementById("id1"). Всё, что я делаю с переменной id1, должно одновременно происходить с объектом document.getElementById("id1") и наоборот. Ведь переменная id1 и объект document.getElementById("id1") (а также document.getElementsByTagName("div")[0] и т.д.) - это два адреса, состоящих из 4-х байт. И они равны между собой.

Сообщение от tsigel Посмотреть сообщение
В строке 5 Вы УДАЛИЛИ тег на который ссылалась переменная "id1"
Именно.

id1.onclick = null
document.getElementById("id1").onclick = null
Сообщение от tsigel Посмотреть сообщение
(при этом не удаляя переменную)
id1.onclick = null
document.getElementById("id1").onclick = null
Сообщение от tsigel Посмотреть сообщение
, и СОЗДАЛИ НОВЫЙ тег, ссылку на который вы НИКУДА не записывали.
id1.onclick = null
document.getElementById("id1").onclick = null

Вот так я понимаю работу ссылок. В чём ошибка моего понимания?

Сообщение от tsigel Посмотреть сообщение
Оператор присвоения ("=") в данном случае никак не связан с вашей переменной! Он говорит чтобы вы записали НОВУЮ строку на место где находится Ваш элемент.
Честно говоря, эти два предложения вообще не понял.
Сообщение от tsigel Посмотреть сообщение
После того как строка записана браузер понимает что это тег.
А следовательно, и это тоже.

Последний раз редактировалось jaroslav.tavgen, 30.03.2015 в 00:15.
Ответить с цитированием
  #84 (permalink)  
Старый 30.03.2015, 08:52
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

Сообщение от jaroslav.tavgen Посмотреть сообщение
Пытаюсь ещё раз понять:


Да. Это значит, что теперь переменная id1 - это адрес объекта document.getElementById("id1"). А значит (поскольку указателей в javascript нету) каждый раз когда я обращаюсь к переменной id1, я работаю НАПРЯМУЮ с объектом document.getElementById("id1"). Всё, что я делаю с переменной id1, должно одновременно происходить с объектом document.getElementById("id1") и наоборот.
Объекты передаются в js по ссылке. Это и есть указатели. Вы работаете не с объектом а с ссылкой на объект. Прочтите пример который я вам сделал на объектах и посты от [b]skrudjmakdak[\b]. Он круто расписал. С картинками.
Ответить с цитированием
  #85 (permalink)  
Старый 30.03.2015, 08:57
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

<div id="id1" onclick="Function1()">Click on me</div>
<script>
"use strict"
var id1 = document.getElementById("id1");
id1.outerHTML = id1.outerHTML.replace('onclick="Function1()"', 'onclick="Function2()"');

alert(id1==document.getElementById("id1"));


</script>
Ответить с цитированием
  #86 (permalink)  
Старый 30.03.2015, 23:39
Кандидат Javascript-наук
Отправить личное сообщение для jaroslav.tavgen Посмотреть профиль Найти все сообщения от jaroslav.tavgen
 
Регистрация: 18.09.2014
Сообщений: 128

tsigel, skrudjmakdak объясняет, что такое указатели в принципе. Я очень хорошо понимаю, что такое указатели... в Assembler и C. И не понимаю - что это такое в javascript.

В Ассемблере всё понятно: [0238A356] означает "два байта находящихся по адресам 0238A357 и 0238A356 соответственно, и именно в таком порядке".

В C чуть завихренистее, но тоже ясно: pointerVariable - это адрес. *pointerVariable - то, что находится по этому адресу.

А в javascript как?

Если id1 - это указатель, то я бы ожидал, что "alert(id1)" выдаст результат, скажем, "030BC123". Ибо указатель - это адрес.

Но в реальности мы имеем явно что-то другое. Что же именно?
Ответить с цитированием
  #87 (permalink)  
Старый 31.03.2015, 03:51
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

Сообщение от jaroslav.tavgen
Ибо указатель - это адрес.
Ты путаешь физический адрес с типом данных(указатель) и как следствие в голове у тебя каша не верных выводов.

В С С++ указатель это базовый тип данных описанный в спецификации который хранит в себе физический адрес.

Указатель javaScript больше всего похож на ссылочный тип данных в других языках т.е. имея ссылку на объект мы можем манипулировать им.
В JS нет такого типа данных как указать нет линейной адресации нет адресной арифметики.

Доступ к данным(адресация) в низкоуровневых языках реализуется с помощью линейно адресуемой физической памяти. в JavaScript используются высокоуровневая абстракция в виде двух древовидных структур( глобальная область видимости и текущий scope) которые позволяют манипулировать данными через имена переменных.
Каждое имя переменой или свойство объекта(что в принципе одно и то же) хранит в себе ссылку(указатель) на данные.
Любые операции кроме ( = && === ) будут работать со значением полученным по этой ссылке.
Присваивание для сложных типов всегда копирует ссылку на объект.
Присваивание для примитивных типов создает новый объект и копирует значение полученное по ссылке.
т.е. для доступа к данным (адресации)
в Ассемблере используется физический адрес - "030BC123"
в JavaScript имена разделенные точками - "wondow.document.body"

т.е. в каком то смысле "id1" в JS это то же самое что и "030BC123" в Assembler.

Последний раз редактировалось MallSerg, 31.03.2015 в 03:57.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
http://gigalit.info - Мои контакты Маэстро Ваши сайты и скрипты 70 08.12.2011 03:12
фрактальный сыр x-yuri Оффтопик 76 23.11.2011 21:59
О фрилансе (Личный опыт) free Оффтопик 105 18.08.2011 17:02
Как (эффективно) изучать JavaScript? JSTalker Общие вопросы Javascript 33 23.12.2010 03:13
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37