Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.03.2016, 11:49
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 428

Прототип объекта
Почему при вызове computer.videocard значение не изменилось?

var computer = {
      type: Math.random().toString(36).substring(7),
      cpu: Math.random().toString(36).substring(7),
      videocard: Math.random().toString(36).substring(7)
    };

var mac;
    mac = Object.create(computer);
    mac.videocard = "nvidia"




Почему, если добавить элемент в массив, то он записывается, а строка нет?

var person = {
name: "Nicholas", 
friends: ["Shelby", "Court", "Van"]
}

var anotherPerson = Object.create(person);
anotherPerson.name = "Greg";
anotherPerson.friends.push("Rob");


person.name // Nicholas

person.friends // ["Shelby", "Court", "Van", "Rob"]
Ответить с цитированием
  #2 (permalink)  
Старый 31.03.2016, 12:46
Кандидат Javascript-наук
Отправить личное сообщение для Strongman Посмотреть профиль Найти все сообщения от Strongman
 
Регистрация: 22.03.2016
Сообщений: 132

1) Я так понял, что там вся соль в прототипе. Сначала создается объект computer. Потом создается объект mac и все свойства объекта computer оказываются в прототипе. Когда делаете это: mac.videocard = "nvidia"; - то просто создается новое свойство videocard.
2) Опять-же смысл в прототипе.
var anotherPerson = Object.create(person);//- это создали объект, все свойства перелетели в прототип;
anotherPerson.name = "Greg";//- создали новое свойство
anotherPerson.name = "Nark";//- изменили это свойство
anotherPerson.friends.push("Rob");//- добавился элемент в массиве в прототипе.
Ответить с цитированием
  #3 (permalink)  
Старый 31.03.2016, 12:48
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от DivMan
mac.videocard = "nvidia";
anotherPerson.name = "Greg";
здесь свойство записывается в сам объект, а в прототипе остается старое.

т.е., для примера с компами, сначала было так
{
  __proto__: {
      type: Math.random().toString(36).substring(7),
      cpu: Math.random().toString(36).substring(7),
      videocard: Math.random().toString(36).substring(7)
  }
}

и значение mac.videocard бралось из __proto__

а после mac.videocard = "nvidia"; стало так:
{
  videocard: "nvidia",
  __proto__: {
      type: Math.random().toString(36).substring(7),
      cpu: Math.random().toString(36).substring(7),
      videocard: Math.random().toString(36).substring(7)
  }
}


videocard теперь в самом объекте

----
а массив не заменяется, просто берется тот который в прототипе.
Ответить с цитированием
  #4 (permalink)  
Старый 31.03.2016, 12:58
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,492

Сообщение от Strongman Посмотреть сообщение
все свойства перелетели в прототип
Перелетела ссылка на объект computer. Объекты передаются/перелетают по ссылке, примитивы по значению.
Ответить с цитированием
  #5 (permalink)  
Старый 31.03.2016, 13:54
Кандидат Javascript-наук
Отправить личное сообщение для Strongman Посмотреть профиль Найти все сообщения от Strongman
 
Регистрация: 22.03.2016
Сообщений: 132

Ну интересно они конечно в JavaScript сделали. Классов как я понял нету. Вместо классов сделали prototype.
Сообщение от Rise
Перелетела ссылка на объект computer.
- дак объекты mac и computer имеют один и тот же адрес что-ли(ссылку)?
Ответить с цитированием
  #6 (permalink)  
Старый 31.03.2016, 15:05
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,492

Strongman, mac.__proto__ и computer
Ответить с цитированием
  #7 (permalink)  
Старый 10.09.2016, 10:10
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 428

Правильно ли я понял, то, что после вызова spot.sit(); у объекта spot, создаётся своё личное свойство sit? И теперь, если ещё раз его вызвать, оно будет браться не из прототипа, а на прямую? 

То есть свойство добавляется в конструктор?

http://plnkr.co/edit/pWlbvzN3Up5rRyUgtkcw?p=preview
Ответить с цитированием
  #8 (permalink)  
Старый 11.09.2016, 08:01
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

DivMan, выкинь свой комплюктер и займись выжиганием по дереву.
Ответить с цитированием
  #9 (permalink)  
Старый 11.09.2016, 19:31
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 428

Почему?
Ответить с цитированием
  #10 (permalink)  
Старый 04.11.2016, 18:32
Профессор
Отправить личное сообщение для DivMan Посмотреть профиль Найти все сообщения от DivMan
 
Регистрация: 08.03.2016
Сообщений: 428

Почему выводит undefined?

https://jsfiddle.net/1qwhk16v/
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
прототип объекта Tecvid Events/DOM/Window 15 13.04.2015 21:19
Canvas. Как сделать или вообще нельзя? Вращение рандомизированно изменяемого объекта. Zemsky Общие вопросы Javascript 30 19.12.2013 17:44
Понимание ООП в JavaScript kefi Общие вопросы Javascript 160 25.09.2012 20:30
Скрипт вычисления координат объекта banderasantonio197555 Events/DOM/Window 4 16.08.2011 16:37
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 18:00