2016-02-15 2 views
2

У меня есть объект cats так:Доступ к свойству объекта в одном объекте

var model = { 
    cats: [ 
     { 
      name: "Fossie", 
      url: "", 
      count: 0 
     }, 
     { 
      name: "Bootsie", 
      url: "", 
      count: 0 
     } 
    ], 
    currentCat: cats[0], //error here 
} 

Когда я пытаюсь получить доступ к cats[0], я получаю следующее сообщение об ошибке: ReferenceError: cats is not defined

Если я заменяю cats[0] с this.cats[0] I получить эту ошибку: Uncaught TypeError: Cannot read property '0' of undefined

Невозможно ли получить доступ к объекту объекта в пределах одного и того же объекта? Или мне нужно создать функцию внутри model и инициализировать там currentCat?

+0

Это не представляется возможным ссылаться объект изнутри его инициализатора объекта. – Pointy

+2

Возможный дубликат [Саморекламы в объявлениях литералов объектов] (http://stackoverflow.com/questions/4616202/self-references-in-object-literal-declarations) –

ответ

1

Нет, это невозможно. Попробуйте вместо этого:

var model = { 
    cats: [ 
     { 
      name: "Fossie", 
      url: "", 
      count: 0 
     }, 
     { 
      name: "Bootsie", 
      url: "", 
      count: 0 
     } 
    ] 
} 
model.currentCat = model.cats[0]; 

Вы не можете использовать объект, прежде чем он был инициализирован - так, где вы пытаетесь установить currentCat, вы были еще «внутри» intialisation, и ваша модель не была доступна.

После этого кода, модель будет выглядеть следующим образом:

model = { 
    cats: [ 
     { 
      name: "Fossie", 
      url: "", 
      count: 0 
     }, 
     { 
      name: "Bootsie", 
      url: "", 
      count: 0 
     } 
    ], 
    currentCat: { 
     name: "Fossie", 
     url: "", 
     count: 0 
    } 
} 
+0

Я вижу, спасибо за ответ. Поэтому я понимаю, почему он не работает. 'cats' еще не инициализируется, когда я делаю' cats [0] 'внутри модели. Правильно? Кроме того, в соответствии с вашим ответом 'model.currentCat = model.cats [0];' назначит свойство currentcat' объекту 'model', а затем назначит его первой кошке, правильно? – akshayKhot

+0

Первая часть правильная. 'model.currentCat = model.cats [0];' будет устанавливать значение 'model.currentCat' независимо от значения первого элемента в вашем массиве' model.cats'. Сама модель не будет сохранена. – millerbr

+0

Есть ли способ содержать 'currentCat' внутри' model'? Просто чтобы сделать его более читаемым? Спасибо – akshayKhot

0

Dont использовать его внутри модели. Используйте его после определения кошек.

var model = { 
    cats: [ 
     { 
      name: "Fossie", 
      url: "", 
      count: 0 
     }, 
     { 
      name: "Bootsie", 
      url: "", 
      count: 0 
     } 
    ], 
    // currentCat: cats[0], //error here 
} 
model.currentCat = model.cats[0]; 

Надеется, что это будет хорошо для вас

+0

Спасибо. Это сработало. – akshayKhot

1

Вы можете сохранить текущий индекс кошки вместо (и доступа к свойству в функции, используя this):

var model = { 
    cats: [ 
     { 
      name: "Fossie", 
      url: "", 
      count: 0 
     }, 
     { 
      name: "Bootsie", 
      url: "", 
      count: 0 
     } 
    ], 
    currentCatIndex: 0, 
    getCurrentCat: function() { 
     return this.cats[this.currentCatIndex]; 
    } 
} 
console.log(model.getCurrentCat()); 
+1

Мне тоже нравится этот подход. Спасибо @falsarella. – akshayKhot

Смежные вопросы