Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.03.2018, 15:08
Интересующийся
Отправить личное сообщение для TibiTotoro Посмотреть профиль Найти все сообщения от TibiTotoro
 
Регистрация: 02.03.2018
Сообщений: 10

Объект в объекте и создание конструктора
Добрый день!
Есть несколько объектов вида
var test = {
a: 1,
b: a +1, 
obj: {
  d: b + 1
  }
}

Можно ли в объекте ссылаться на свойство этого же объекта, т.е. как правильно записать b (b: this.a +1 не работает)?
И можно ли в свойстве d объекта obj ссылаться на свойства a или b, и если да, то как?
И последний вопрос, хотя он вероятнее всего решится после первых двух, можно ли создать для подобных объектов конструктор?
Ответить с цитированием
  #2 (permalink)  
Старый 21.03.2018, 15:44
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,228

Сообщение от TibiTotoro
Можно ли в объекте ссылаться на свойство этого же объекта, т.е. как правильно записать b (b: this.a +1 не работает)?
Может быть прочитав букварь многое прояснится...
Ответить с цитированием
  #3 (permalink)  
Старый 21.03.2018, 20:43
Интересующийся
Отправить личное сообщение для TibiTotoro Посмотреть профиль Найти все сообщения от TibiTotoro
 
Регистрация: 02.03.2018
Сообщений: 10

Сообщение от ksa Посмотреть сообщение
Может быть прочитав букварь многое прояснится...
Спасибо за развернутый ответ... Но хотелось бы какой-то конкретики по второй части вопроса, а именно по конструктору объекта, у которого свойство - это тоже объект, свойство которого ссылается на свойство родительского объекта. Со страницей, ссылку на которую вы отправили, я уже почти сроднилась, но ответ до сих пор скрыт для меня.
У меня было несколько вариантов, но ни один не сработал, самый близкий мне, но все равно не рабочий
function test(name)  {
					var self = this;
					this.a = 1; 
					this.b = function(){
						return this.a + 1;
					};
					this.obj = function (){
						this.d =  function(){
							return self.b + 5;
						};
					}
				}

Если можно, мне бы более конкретные ссылки)
Ответить с цитированием
  #4 (permalink)  
Старый 21.03.2018, 21:26
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,590

Если имеется ввиду просто задание конкретных независимых свойств - литерал объекта такого не позволяет.
Придётся задавать вручную:
var test = {
  a: 1,
  obj: {}
}

test.b = test.a + 1;
test.obj.d = test.b + 1;

Если же нужны динамически зависимые значения, то можно воспользоваться сеттерами/геттерами:
var test = {
  a: 1,
  get b(){
    return this.a + 1;
  },
  set b(val){
    return this.a = val - 1;
  }
};
test.obj = {  
  get d(){
    return test.b + 1;
  },
  set d(val){
    return test.b = val - 1;
  }
};
alert(test.obj.d); //3
test.obj.d = 4;
alert(test.a); //2
или Proxy, но от ручной работы вам избавиться всё равно не получится (ну разве что написать для этого дела функцию-помощник).

Всё дело тут в том, что "вложенные" объекты в javascript на самом деле никакие не вложенные. В свойство объекта кладётся просто ссылка на другой объект и не более того. Каждый объект абсолютно самодостаточен и никак не связан с тем в который "вложен".
Пример для понимания:
var inner = {
  a: 1
};
var outer1 = {
  b: inner
};
var outer2 = {
  c: inner
};
alert(outer1.b.a === outer2.c.a); //true
И какой из объектов outer считать родителем для inner?
Теоретически язык мог бы строить каждый раз динамический трейс в зависимости от конкретной цепочки вызова, но в javascript такого нет, так что всё ручками.
__________________
29375, 35

Последний раз редактировалось Aetae, 21.03.2018 в 21:41.
Ответить с цитированием
  #5 (permalink)  
Старый 22.03.2018, 08:13
Интересующийся
Отправить личное сообщение для TibiTotoro Посмотреть профиль Найти все сообщения от TibiTotoro
 
Регистрация: 02.03.2018
Сообщений: 10

Спасибо, так гораздо понятнее. Буду изучать.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание JS конструктора sheckler Работа 2 25.05.2015 21:24
Создание Конструктора sheckler Элементы интерфейса 1 25.05.2015 12:02
Динамический объект в объекте Аарон Общие вопросы Javascript 11 27.03.2014 00:00
Создать объект в объекте Bryant-24 Общие вопросы Javascript 3 10.07.2013 16:06
как добавить свойство объекта в объект в объекте ? %) mitiya Общие вопросы Javascript 1 07.10.2012 14:46