Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.02.2013, 13:28
Аспирант
Отправить личное сообщение для Василий Б. Посмотреть профиль Найти все сообщения от Василий Б.
 
Регистрация: 01.03.2010
Сообщений: 44

Прототипы. Хочу понять
Решил создать новую тему.
Доки читал, но понять пока не могу.
Вопросы все в коде.

Base = function(){};
Parent = function(){};
Parent.prototype = Base;

var p = new Parent();

// Добавляем к Base метод и метод в прототип.
Base.func_as_prop = function(){};
Base.prototype.func_in_proto = function(){};

console.log('Testing parent:');
console.log("p.func_as_prop: "  + p.func_as_prop); // function - Почему свойство в добавилось в parent? Оно же было добавлено в Base после инстанса объекта!
console.log("p.func_in_proto: " + p.func_in_proto); // undefined - Почему не ищет в прототипе Base?

console.log('Testing Base:');
console.log("Base.func_as_prop: "  + Base.func_as_prop);
console.log("Base.func_in_proto: " + Base.func_in_proto); // undefined - Почему не ищет в своем прототипе?

Последний раз редактировалось Василий Б., 27.02.2013 в 13:30.
Ответить с цитированием
  #2 (permalink)  
Старый 27.02.2013, 14:00
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Василий Б.
// function - Почему свойство в добавилось в parent?
Сейчас p.__proto__ ссылается на Parent.prototype, который ссылается на функцию, объявленную как Base. В восьмой строке ты добавляешь для этой самой функции свойство func_as_prop.

Сообщение от Василий Б.
console.log("p.func_as_prop: " + p.func_as_prop);
Тут свойство func_as_prop сначала ищется в объекте p, не находится, далее ищется в объекте, на который ссылается p.__proto__, тоесть в Parent.prototype - и там оно находится.

Сообщение от Василий Б.
// undefined - Почему не ищет в прототипе Base?
Ты путаешь prototype и __proto__
Свойства ищутся в __proto__ а не в prototype
Сообщение от Василий Б.
// undefined - Почему не ищет в своем прототипе?
Тоже самое. "Свой" прототип - это объект, на который ссылается __proto__



Сообщение от Василий Б.
Parent.prototype = Base;
Не потерял ли ключевое слово new?
Ответить с цитированием
  #3 (permalink)  
Старый 27.02.2013, 14:49
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Плюк ко всему - имена выбраны неудачно. Может, Parent переименовать в Child?
Ответить с цитированием
  #4 (permalink)  
Старый 27.02.2013, 15:52
Аспирант
Отправить личное сообщение для Василий Б. Посмотреть профиль Найти все сообщения от Василий Б.
 
Регистрация: 01.03.2010
Сообщений: 44

Цитата:
Не потерял ли ключевое слово new?
потерял. теперь все вообще по другому стало:
Base = function(){};
Child = function(){};
Child.prototype = new Base;

var c = new Child();

// Добавляем к Base метод и метод в прототип.
Base.func_as_prop = function(){};
Base.prototype.func_in_proto = function(){};

console.log('Testing Child:');
console.log("c.func_as_prop: "  + c.func_as_prop); // undefined
console.log("c.func_in_proto: " + c.func_in_proto); // function 

console.log('Testing Base:');
console.log("Base.func_as_prop: "  + Base.func_as_prop); // function 
console.log("Base.func_in_proto: " + Base.func_in_proto); // undefined

и все же я не могу понять разницу между __proto__ и prototype. Сейчас ещё раз попробую почитать, но описанной информации мне как-то не достаточно для полного понимания..
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу понять Замыкание. slip AJAX и COMET 7 19.01.2013 14:40
хочу спросить цену скрипта legrol Работа 2 06.11.2012 09:41
Ковыряюсь в .show(), хочу понять как она раздвигает элемент не зная его размера... sysya jQuery 3 21.08.2010 11:27
Что такое прототипы Deniskan Общие вопросы Javascript 7 03.08.2010 16:06
Хочу понять, где ошибка duron Ваши сайты и скрипты 19 05.02.2010 14:46