Прототип объекта
Почему при вызове 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"] |
1) Я так понял, что там вся соль в прототипе. Сначала создается объект computer. Потом создается объект mac и все свойства объекта computer оказываются в прототипе. Когда делаете это: mac.videocard = "nvidia"; - то просто создается новое свойство videocard.
2) Опять-же смысл в прототипе. var anotherPerson = Object.create(person);//- это создали объект, все свойства перелетели в прототип; anotherPerson.name = "Greg";//- создали новое свойство anotherPerson.name = "Nark";//- изменили это свойство anotherPerson.friends.push("Rob");//- добавился элемент в массиве в прототипе. |
Цитата:
т.е., для примера с компами, сначала было так { __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 теперь в самом объекте ---- а массив не заменяется, просто берется тот который в прототипе. |
Ну интересно они конечно в JavaScript сделали. Классов как я понял нету. Вместо классов сделали prototype.
Цитата:
|
Правильно ли я понял, то, что после вызова spot.sit(); у объекта spot, создаётся своё личное свойство sit? И теперь, если ещё раз его вызвать, оно будет браться не из прототипа, а на прямую?
То есть свойство добавляется в конструктор? http://plnkr.co/edit/pWlbvzN3Up5rRyUgtkcw?p=preview |
DivMan, выкинь свой комплюктер и займись выжиганием по дереву.
|
Почему?
|
|
Часовой пояс GMT +3, время: 01:03. |