Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #41 (permalink)  
Старый 25.03.2015, 16:55
Аспирант
Посмотреть профиль Найти все сообщения от newuser1001
 
Регистрация: 24.03.2015
Сообщений: 92

skrudjmakdak,
Да, хорошо, спасибо. Но сдается мне, что ты не прав
Ответить с цитированием
  #42 (permalink)  
Старый 25.03.2015, 16:59
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от MallSerg
foo вернулся )
foo bar гнилой базар

А может он не foo, а ффууу?)))
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
  #43 (permalink)  
Старый 25.03.2015, 17:14
Аспирант
Посмотреть профиль Найти все сообщения от newuser1001
 
Регистрация: 24.03.2015
Сообщений: 92

skrudjmakdak,
И, прежде чем отвечать посмотри внимательно на этот код:
<html>
<head>
</head>
<body>

<div id="id1" foo="">Click on me</div>

<script>

id1=document.getElementById("id1")
id2={outerHTML: '<div id="id2" foo="">Click on me</div>'}
id1.outerHTML=id1.outerHTML.replace("foo", "bar")
id2.outerHTML=id2.outerHTML.replace("foo", "bar")

alert([id1.outerHTML, "\n", id2.outerHTML])

 
</script>
</body>
</html>
Ответить с цитированием
  #44 (permalink)  
Старый 25.03.2015, 20:06
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

посмотрел, все правильно. хочу сразу сказать, что у начинающий взрываются мозги от непонимания УКАЗАТЕЛЕЙ. а теперь поехали


//начнем с простого. для начала создадим две переменные:
var a = 1, b = 2;
b = a;
a = 3;
console.log(a); //= 3
console.log(b); //= 1
//думаю тут вопросов нет

//теперь с массивами
a = [1, 2, 3];
b = [6, 7, 8];
b = a;
a[0] = 0;
//выведем
console.log(a); //= [0, 2, 3]
console.log(b); //= [0, 2, 3]
//показывает одинаковые результаты. когда мы написали b = a; то произошла не копия массива, а передалась ссылка.
//поэтому когда мы написали a[0] = 0; а потом посмотрели на то что хранится в "b", то увидели тоже самое. т.к. смотрим на один
//и тот же массив.


поэтому, когда мы присваиваем обычные значения (числа, строки, булевы), то присваиваем ЗНАЧЕНИЕ. а когда объекты, массивы - то передается ССЫЛКА, а не КОПИЯ! это очень при очень важно


если попытаться объяснить на пальцах, то представь комнату с двумя дверьми. ты зашел через одну дверь и положил на стол 100 рублей.
потом зашел через другую дверь и там лежат твои самые 100 рублей. надеюсь идея понятна. теперь с элементами

смотрим на картинку

html, head, body, ... - это все объекты (кстати массив в javascript это тоже своего рода объект)
т.е. когда мы напишем document.body - то мы получим объект <body> у него есть дети <div> и <script>

<html>
	<head></head>
	<body>
		<div>123</div>
		<script>
console.log(document.body.children[0]); //выведем <div>. (смотри рисунок 3)
//найдем этот див через метод querySelector и запишем в переменную "а"
var a = document.querySelector('div');
//т.е. сейчас ситуация подобная как и с массивом. к диву можно получить доступ из 2х мест (смотри рисунок 4)
//т.е. <body> ссылается на див и переменная "a" тоже ссылается на див.
//также мы можем увидеть, что у <div> есть родитель:
console.log(a.parentElement);

//теперь напишем нашу проклятую outerHTML
a.outerHTML = '<span>5555</span>';//переводя на русский язык мы говорим, что убрать <div> и на место него поставить <span>
//да, мы за место <div> поставили <span> но, переменная "а" продолжает ссылаться на <div>. (смотри рисунок 5)
//мы просто УБРАЛИ СВЯЗЬ между <body> и <div> НЕ БОЛЕЕ!!!
console.log(a.parentElement); //нет родителя у <div> этот объект просто находится в памяти (смотри рисунок 6)
		</script> 
	</body>
</html>



рисунок 3.

рисунок 4.

рисунок 5.

рисунок 6.
Ответить с цитированием
  #45 (permalink)  
Старый 25.03.2015, 20:13
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

еще хочу добавить. браузер не изменяет объект <div> на <span>. но создает новый объект <span>. получается два объекта <div> и <span>
переменная a ссылается на <div>
а <body> теряет ссылку на <div> и передает указатель на <span>
Ответить с цитированием
  #46 (permalink)  
Старый 25.03.2015, 20:27
Аспирант
Посмотреть профиль Найти все сообщения от newuser1001
 
Регистрация: 24.03.2015
Сообщений: 92

skrudjmakdak,
Спасибо, конечно, за столь подробное объяснение, я бегло посмотрел, пока, позже посмотрю, но ничего нового для себя я не нашел. Ты мог написать проще: в JS все передается по ссылке. Но я по прежнему не вижу связи. Вот в этом примере

Что за ФИГНЯ?! У этого языка программирования логика вообще есть?!

мы имеем 2 ссылки на 2 объекта, точней, на их св-ва, однако ведут они себя по-разному.
Ответить с цитированием
  #47 (permalink)  
Старый 25.03.2015, 20:31
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

какое из свойств тебя смущает? первое или второе?
Ответить с цитированием
  #48 (permalink)  
Старый 25.03.2015, 20:36
Аспирант
Посмотреть профиль Найти все сообщения от newuser1001
 
Регистрация: 24.03.2015
Сообщений: 92

skrudjmakdak,
Меня не смущают свойства. Смущает то, мы делаем обоим объектам одинаковые операции, назовем условно, object.setSlot(oldvalue, newvalue), а реакции разные. Это косяк реализации, не надо тут высокие материи искать.

Последний раз редактировалось newuser1001, 25.03.2015 в 20:39.
Ответить с цитированием
  #49 (permalink)  
Старый 25.03.2015, 20:50
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

во, нашел подходящую статью про сеттеры и геттеры
http://learn.javascript.ru/descriptors-getters-setters
Ответить с цитированием
  #50 (permalink)  
Старый 25.03.2015, 20:54
Аспирант
Посмотреть профиль Найти все сообщения от newuser1001
 
Регистрация: 24.03.2015
Сообщений: 92

skrudjmakdak,
Да я не про геттеры и сеттеры говорю, а про обычное присваивание. оно тупо не отрабатывает в первом случае. Причем, та же самая фишка с innerHTML отрабатывает как ожидается. ТС прав, это косяк.
Ответить с цитированием
Ответ



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

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


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