Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.08.2013, 20:04
Кандидат Javascript-наук
Отправить личное сообщение для FanAizu Посмотреть профиль Найти все сообщения от FanAizu
 
Регистрация: 08.03.2011
Сообщений: 148

Изменение свойств прототипа
Подскажите, пожалуйста, правильно ли я понимаю. Например, если есть объект А(у которого есть свойства test = 'hello', test2 = [0, 1, 2]) и есть объект Б, прототипом которого является объект А. В методе объекта Б если изменить значение свойства test, то это свойство будет найдено в прототипе и изменено, но при этом будет записано уже непосредственно как свойство объекта Б(то есть значение свойства test прототипа объекта Б(объект А) не изменится), и, если изменить значение свойства test2, то это свойство будет найдено в прототипе и изменено и при этом измененное значение будет записано в прототип объекта Б(объект А). Верно? То есть элементарные типы данных, такие как строки, числа изменяются непосредственно в объекте, а неэлементарные, такие как массивы, объекты меняются в прототипе. Верно?
Ответить с цитированием
  #2 (permalink)  
Старый 23.08.2013, 20:16
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

где тестовый пример с возможностью запуска?
Ответить с цитированием
  #3 (permalink)  
Старый 23.08.2013, 20:20
Кандидат Javascript-наук
Отправить личное сообщение для FanAizu Посмотреть профиль Найти все сообщения от FanAizu
 
Регистрация: 08.03.2011
Сообщений: 148

Сообщение от bes Посмотреть сообщение
где тестовый пример с возможностью запуска?
function test()
{
	this.name = [10,12];
	this.name2 = 10;
}

var bla = new test();

function test2()
{
	this.go = function()
	{
		this.name[0] = 20;
		this.name2 = 20;
	};
}

test2.prototype = bla;

var bla2 = new test2();

alert(bla.name[0]);
alert(bla.name2);

bla2.go();

alert(bla.name[0]);
alert(bla.name2);
alert(bla2.name[0]);
alert(bla2.name2);
Ответить с цитированием
  #4 (permalink)  
Старый 23.08.2013, 20:29
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от FanAizu
если изменить значение свойства test2, то это свойство будет найдено в прототипе и изменено и при этом измененное значение будет записано в прототип объекта Б(объект А).
смотря как "изменить".
если this.name[0] = 20;, то свойство так и останется в прототипе (т.к. мы просто меняем что-то внутри него).
если this.name = [...], то новое значение свойства запишется в объект.
Ответить с цитированием
  #5 (permalink)  
Старый 23.08.2013, 20:35
Профессор
Отправить личное сообщение для Яростный Меч Посмотреть профиль Найти все сообщения от Яростный Меч
 
Регистрация: 12.04.2010
Сообщений: 557

Сообщение от Яростный Меч
если this.name = [...], то новое значение свойства запишется в объект.
а в прототипе останется старое, с этого момента недоступное (однако его можно вернуть, удалив новое свойство из объекта: delete this.name)
Ответить с цитированием
  #6 (permalink)  
Старый 23.08.2013, 21:13
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

вызвав go в test2, начинается поиск name в test2, а так как его там нет, ищется в протитипе

function test() {
	this.name = [10,12];
	this.name2 = 10;
}
function test2() {
	this.go = function() {
		this.name[0] = 20;
		this.name2 = 20;
	};
}
var bla = new test();

var bla1 = new test2();
alert(bla1.name);

test2.prototype = bla;

var bla2 = new test2();
alert(bla2.name);


PS: возможность запуска [js run]

Последний раз редактировалось bes, 23.08.2013 в 21:15.
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение к элементу и изменение его свойств Sveta Общие вопросы Javascript 2 24.07.2013 11:18
Изменение свойств одного блока при наведении курсора на другой latter-day Events/DOM/Window 4 01.04.2013 18:35
Изменение свойств плагина Igma jQuery 0 27.06.2011 18:58
Как обработать изменение масштаба окна в IE8 ? v_k Events/DOM/Window 1 09.08.2010 13:35
Изменение свойств картинок в документе Gekt0r Общие вопросы Javascript 10 14.08.2008 18:33