Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 07.07.2012, 14:29
Аватар для Drimogemon
Профессор
Отправить личное сообщение для Drimogemon Посмотреть профиль Найти все сообщения от Drimogemon
 
Регистрация: 02.07.2012
Сообщений: 106

вот первых вот принцип работы не рассматривающий внутренние механизмы.
http://javascript.ru/forum/185323-post1.html
Ответить с цитированием
  #12 (permalink)  
Старый 07.07.2012, 14:33
Аватар для Drimogemon
Профессор
Отправить личное сообщение для Drimogemon Посмотреть профиль Найти все сообщения от Drimogemon
 
Регистрация: 02.07.2012
Сообщений: 106

Сообщение от almac
1. Почему прототип объекта не создается при помощи конструктора Object?
прототип обьекта СОЗДАЕТСЯ при помощь Object. Смотри.

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

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

Последний раз редактировалось Drimogemon, 07.07.2012 в 14:39.
Ответить с цитированием
  #13 (permalink)  
Старый 07.07.2012, 14:38
Аватар для Drimogemon
Профессор
Отправить личное сообщение для Drimogemon Посмотреть профиль Найти все сообщения от Drimogemon
 
Регистрация: 02.07.2012
Сообщений: 106

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

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

Только один ньюанс, когда оно создавалось автоматчиески оно было скрытым и немеречисляемым при for in ? а когда мы его создаем вручную , то создается обычное перечисляемое свойство, и это геморно слегка.
Ответить с цитированием
  #14 (permalink)  
Старый 07.07.2012, 16:34
Аспирант
Отправить личное сообщение для almac Посмотреть профиль Найти все сообщения от almac
 
Регистрация: 29.06.2012
Сообщений: 31

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


Другой вопрос, что у этого Object() ещё создаётся свойство constructor, которое желательно возвращать прототипу при перезаписи.
1. В чем моя ошибка: прототип объекта НЕ создается при помощи конструктора Object (я вообще не понимаю почему именно так, просто Стефанов совсем противоположное пишет: якобы прототип - это простой объект). Выходит, что прототип тоже создается при помощи своего конструктора (свойство сonstructor)?
А вот прототип прототипа f.prototye.__proto__ - это уже простой объект.
2. "желательно возвращать прототипу при перезаписи". Почему ?
Ответить с цитированием
  #15 (permalink)  
Старый 07.07.2012, 17:16
Аватар для Drimogemon
Профессор
Отправить личное сообщение для Drimogemon Посмотреть профиль Найти все сообщения от Drimogemon
 
Регистрация: 02.07.2012
Сообщений: 106

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

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

Последний раз редактировалось Drimogemon, 07.07.2012 в 17:25.
Ответить с цитированием
  #16 (permalink)  
Старый 07.07.2012, 17:21
Аватар для Drimogemon
Профессор
Отправить личное сообщение для Drimogemon Посмотреть профиль Найти все сообщения от Drimogemon
 
Регистрация: 02.07.2012
Сообщений: 106

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

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

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


при создании каждого кота, своство cats будет увеличиваться, типа того, то есть this.constructor нужно чтобы у всех обьектов было общее "хранилеще данных" куда можно что-то сложить общее для всех котов ЕСЛИ ЗАХОЧЕТСЯ ЭТО СДЕЛАТЬ разумеется. ну в общем разные применения.
Ответить с цитированием
  #17 (permalink)  
Старый 07.07.2012, 21:07
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

Сообщение от almac
прототип объекта НЕ создается при помощи конструктора Object
false
Ответить с цитированием
  #18 (permalink)  
Старый 07.07.2012, 21:07
Аспирант
Отправить личное сообщение для almac Посмотреть профиль Найти все сообщения от almac
 
Регистрация: 29.06.2012
Сообщений: 31

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

Последний раз редактировалось almac, 07.07.2012 в 22:20.
Ответить с цитированием
  #19 (permalink)  
Старый 07.07.2012, 21:31
Аспирант
Отправить личное сообщение для almac Посмотреть профиль Найти все сообщения от almac
 
Регистрация: 29.06.2012
Сообщений: 31

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

Последний раз редактировалось almac, 07.07.2012 в 22:20.
Ответить с цитированием
  #20 (permalink)  
Старый 08.07.2012, 00:25
Аватар для Drimogemon
Профессор
Отправить личное сообщение для Drimogemon Посмотреть профиль Найти все сообщения от Drimogemon
 
Регистрация: 02.07.2012
Сообщений: 106

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34
JavaScript: ООП Ars_Art Общие вопросы Javascript 13 09.02.2010 02:32