Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Странный баг при prototype (https://javascript.ru/forum/misc/25615-strannyjj-bag-pri-prototype.html)

Solovei95 10.02.2012 15:41

Странный баг при prototype
 
Я заметил, что когда меняю a.optima, меняется и c.optima
//Создаем обьект apple
var Apple = function(){
	this.optima = 1;
}
var a = new Apple();

//Создаем обьект container и присваем прототип от apple
var Container = function(){}
Container.prototype = a;
var c = new Container();

//Странный баг
a.optima = 2;
alert(c.optima);


Почему так происходит?

Kolyaj 10.02.2012 15:46

Потому что в c нет свойства optima, оно из a берётся.

irezvov 10.02.2012 16:29

Цитата:

Сообщение от Solovei95 (Сообщение 156555)
Я заметил, что когда меняю a.optima, меняется и c.optima
//Создаем обьект apple
var Apple = function(){
	this.optima = 1;
}
var a = new Apple();

//Создаем обьект container и присваем прототип от apple
var Container = function(){}
Container.prototype = a;
var c = new Container();

//Странный баг
a.optima = 2;
alert(c.optima);


Почему так происходит?

это не баг, это фича

9xakep 10.02.2012 20:27

Странного ничего нет, т.к когда ты пишешь Container.prototype = a;, то в контейнере будет лежать ссылка на Apple, соответсвенно когда ты изменяешь параметр значение optimа, то при вызове: c.optima, это значение и берется. Вроде не ошибся...


Часовой пояс GMT +3, время: 23:14.