Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Тонкости создания прототипов (https://javascript.ru/forum/misc/63521-tonkosti-sozdaniya-prototipov.html)

pomidor_makaronus 13.06.2016 11:36

прошу прощения алгоритм описывается в книге Николаса Закаса: JavaScript для профессиональных веб-разработчиков.

aklis 13.06.2016 11:39

var a = {
c:1,
a:3
}
var b = a;

b.c = 0;
alert(a.c);


Объект существует отдельно от переменных, переменные хранят только ссылку на него, поэтому алерт 0. Из одной переменной мы меняем свойство, а из другой его получаем. Но объект один единственный.

Яростный Меч 13.06.2016 11:39

Точнее, в том первом пункте создаётся пустой объект и ему присваивается прототип. А в переменную el это попадает после 4 пункта

aklis 13.06.2016 11:41

Цитата:

Сообщение от Яростный Меч
Точнее, в том первом пункте создаётся пустой объект и ему присваивается прототип. А в переменную el это попадает после 4 пункта

Воот, в переменную попадает ссылка на уже готовый объект.

pomidor_makaronus 13.06.2016 11:41

Цитата:

Сообщение от Яростный Меч (Сообщение 419240)
Это происходит в п.1 алгоритма

Тогда какая разница между 1-м и 4 пунктом?

aklis 13.06.2016 11:47

1 {} - создание объекта, свойств нет.
2 this конструктора равен этому обьекту.
3 выполняем код конструктора к примеру this.a = 0 ;
в результате наш обьект уже не пуст {a:0};
4 конструктор завершает работу, и мы наконец передаем ссылку на него в переменную.

Както так, незнаю уж насколько понятно изложил.

pomidor_makaronus 13.06.2016 11:49

Спасибо врубился т.е под созданием объекта (п. 1) подразумевается наполнение его стандартными свойствами javascript в том числе и свойством prototype вместе с его значением на момент создания объекта. А (п. 4) подразумевает просто присвоение переменной el ссылки на
этот объект!?

aklis 13.06.2016 11:52

Все верно, созданием пустых обьектов занимается специальный конструктор и прототип создает он, еще на этапе номер 1. Потом мы можем его перезаписать.

pomidor_makaronus 13.06.2016 11:53

Спасибо aklis,
Яростный Меч! Вы мне очень помогли.

pomidor_makaronus 13.06.2016 12:39

Ой, ссори поспешил. Все равно не пойму: Вот я
1. создал объект
2. дал ему ссылку на прототип
3. выполнил код внутри функции Element которая перезаписала ссылку на
прототип, причем до обращения к этому объекту извне.
4. вернул ссылку на Element переменной var el
Т.е. основной вопрос попрежнему остается почему у меня нет доступа к
этому прототипу ?


Часовой пояс GMT +3, время: 23:35.