Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.04.2013, 23:16
Аватар для Akalenik
Интересующийся
Отправить личное сообщение для Akalenik Посмотреть профиль Найти все сообщения от Akalenik
 
Регистрация: 05.03.2013
Сообщений: 20

Наследование. ПОчему так?
Разбираюсь с наследованием по руководству Флэнагана. Там указывается функция создания нового объекта наследующего прототип:
function inherit(p){
    if (p==null) throw TypeError();
    if (Object.create) {
        return Object.create(p);
    }
    var t = typeof p;
    if (t !== "object" && t !== "function") throw TypeError;
    function f() {};
    f.prototype = p;
    return new f();
}


Работая с ней, к примеру, так:
var o = {};
o.x = 1;
var p = inherit(o);
p.x = 3;

я в итоге получаю вывод:
o: Object {x: 1}
p: Object {x: 3, x: 1}

Вопрос: почему свойство х дублируется, а не изменяется? Где я запутался?
Ответить с цитированием
  #2 (permalink)  
Старый 07.04.2013, 23:40
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Что за консоль так выводит? Свойства не могут дублироваться, они находятся в разных объектах:
p.x == 3 // → true
p.__proto__.x == 1 // → true
Ответить с цитированием
  #3 (permalink)  
Старый 07.04.2013, 23:52
Аватар для Akalenik
Интересующийся
Отправить личное сообщение для Akalenik Посмотреть профиль Найти все сообщения от Akalenik
 
Регистрация: 05.03.2013
Сообщений: 20

Консоль хрома выводит.
Сообщение от Octane
Свойства не могут дублироваться, они находятся в разных объектах
То есть фактически мы имеем Object {{x: 1}, x: 3}? Или как на практике различить эти два свойства x?
Ответить с цитированием
  #4 (permalink)  
Старый 08.04.2013, 00:37
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

х == 1 находится в прототипе объекта р, х == 3 свойство самого объекта р
Ответить с цитированием
  #5 (permalink)  
Старый 08.04.2013, 08:54
Аватар для Akalenik
Интересующийся
Отправить личное сообщение для Akalenik Посмотреть профиль Найти все сообщения от Akalenik
 
Регистрация: 05.03.2013
Сообщений: 20

Я правильно понимаю что в любой текущий момент мы работаем с одним определенным свойством х: если есть свойство х самого объекта, то с ним, а иначе поднимаемся к свойству х прототипа? А вот отображение обоих свойств х одновременно - это "глюк" консоли хрома?
Ответить с цитированием
  #6 (permalink)  
Старый 08.04.2013, 09:15
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

да
Ответить с цитированием
  #7 (permalink)  
Старый 08.04.2013, 09:40
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Это не глюк, это фича..
Ответить с цитированием
  #8 (permalink)  
Старый 08.04.2013, 12:30
Аватар для megaupload
Профессор
Отправить личное сообщение для megaupload Посмотреть профиль Найти все сообщения от megaupload
 
Регистрация: 18.01.2013
Сообщений: 1,098

Сообщение от Akalenik
А вот отображение обоих свойств х одновременно - это "глюк" консоли хрома?
console.dir() используешь?
Ответить с цитированием
  #9 (permalink)  
Старый 08.04.2013, 13:55
Аватар для Akalenik
Интересующийся
Отправить личное сообщение для Akalenik Посмотреть профиль Найти все сообщения от Akalenik
 
Регистрация: 05.03.2013
Сообщений: 20

console.log().
Про консоль.дир не знал. Теперь почитаю про нее.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
почему function'ы работают только с приминением setTimeout TommyTunec Events/DOM/Window 2 22.01.2013 11:48
Почему неразрывный пробел заменяется на & nbsp; danik.js Events/DOM/Window 4 09.01.2013 00:44
Свойства объекта, методы и this. Почему свойство вызывается с () ? jsuse Общие вопросы Javascript 2 04.11.2011 20:39
Prototype. Одноблочное определение псевдокласса. Литеральная форма не робит. Почему? GuardCat Общие вопросы Javascript 6 03.10.2011 13:46
наследование установок динамически создаваемыми элементами majestic jQuery 1 15.09.2008 13:21