Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Javascript: вопросы по ООП (https://javascript.ru/forum/misc/29685-javascript-voprosy-po-oop.html)

Drimogemon 07.07.2012 14:29

вот первых вот принцип работы не рассматривающий внутренние механизмы.
http://javascript.ru/forum/185323-post1.html

Drimogemon 07.07.2012 14:33

Цитата:

Сообщение от almac
1. Почему прототип объекта не создается при помощи конструктора Object?

прототип обьекта СОЗДАЕТСЯ при помощь Object. Смотри.

// СОЗДАЛИ прототип  ПРИ ПОМОЩИ Object
var prototype = Object({name:'ololo'});

// подключили его к функции Cat
function Cat (){};
Cat.prototype = prototype;

Drimogemon 07.07.2012 14:38

Цитата:

Сообщение от almac
2. Зачем задавать конструктор для прототипа при ПЕРЕзаписи прототипа?
Пример:

Потому что присоздании каждой функции в её свойстве prototype автоматически создается прототип пустышка, предполагая что эту функцию будут использовать как конструктор.
Он выглядит так
function Cat(){};
Cat.prototype = {constructor:Cat}

ну так сделано чтобы в созданных обьектах была ссылка на конструктор который их создал, и если мы перезаписываем этот прототип ЦЕЛИКОМ (а не просто добавлем в него что-то) то нужно и замутить вот это свойство constructor вручную.

Только один ньюанс, когда оно создавалось автоматчиески оно было скрытым и немеречисляемым при for in ? а когда мы его создаем вручную , то создается обычное перечисляемое свойство, и это геморно слегка.

almac 07.07.2012 16:34

Цитата:

Сообщение от Раед (Сообщение 186998)
Вы ошибаетесь
function f(){}
alert(f.prototype.__proto__.constructor===Object);//true


Другой вопрос, что у этого Object() ещё создаётся свойство constructor, которое желательно возвращать прототипу при перезаписи.

1. В чем моя ошибка: прототип объекта НЕ создается при помощи конструктора Object (я вообще не понимаю почему именно так, просто Стефанов совсем противоположное пишет: якобы прототип - это простой объект). Выходит, что прототип тоже создается при помощи своего конструктора (свойство сonstructor)?
А вот прототип прототипа f.prototye.__proto__ - это уже простой объект.
2. "желательно возвращать прототипу при перезаписи". Почему ?

Drimogemon 07.07.2012 17:16

Цитата:

Сообщение от almac
прототип объекта НЕ создается при помощи конструктора Object

автоматически прототип СОООздается вот так new Object
и это пустой обьект, с одним скрытым свойством.
{__proto__: Object.prototype}

а в Object.prototype уже лежит ссылка constructor на функцию Object

Drimogemon 07.07.2012 17:21

Цитата:

Сообщение от almac
2. "желательно возвращать прототипу при перезаписи". Почему ?

Чтобы была возможность понять чем создан обьект, каким конструктором.

если уж говорить конкретнее то чтобы можно было реализовывать статические свойства.

function Cat(){
  this.constructor.cats ++; 
}
Cat.cats = 0;


при создании каждого кота, своство cats будет увеличиваться, типа того, то есть this.constructor нужно чтобы у всех обьектов было общее "хранилеще данных" куда можно что-то сложить общее для всех котов ЕСЛИ ЗАХОЧЕТСЯ ЭТО СДЕЛАТЬ разумеется. ну в общем разные применения.

Раед 07.07.2012 21:07

Цитата:

Сообщение от almac
прототип объекта НЕ создается при помощи конструктора Object

false :lol:

almac 07.07.2012 21:07

Ответил в топике в самом начале

almac 07.07.2012 21:31

Ответил в топике в самом начале

Drimogemon 08.07.2012 00:25

almac,
ты все не правильно понял, хчоешь понят как оно работает открой консоль хрома и смотри там


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