Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Пропадает свойство обьекта (https://javascript.ru/forum/misc/61764-propadaet-svojjstvo-obekta.html)

kva212 07.03.2016 10:00

Пропадает свойство обьекта
 
Здравствуйте.
Проблема вроде бы элементарная. Попал в ступор, помогите....
------
Есть объект tree, в котором есть свойство person - массив объектов.
Вот кусок кода:

console.log(tree.person[id]);
console.log(tree.person[id].posX);

(строки идут подряд).
первая строка выводит объект, в котором ЕСТЬ свойство posX
вторая вводит undifined

помогите, пожалуйста.

Coriolan161 07.03.2016 10:23

kva212,
Если у тебя свойство posX для объекта id не определено, то консоль правильно выводит undefined.

kva212 07.03.2016 11:19

Как так не определено???
если я в предыдущей строке вывожу объект, и в нем есть это свойство, с правильным значением.
а в этой строке обращаюсь к свойству - а его якобы нет.

может я чего-то не понимаю в объектах, но как такое может быть?
все другие свойства есть.

Coriolan161 07.03.2016 11:41

kva212,
покажи весь объект tree

kva212 07.03.2016 12:10

{
birstday: "0000-00-00"
dead: "0"
deadday: "0000-00-00"
id: "138"
name: "Таня"
photo: "0.jpg"
posX: 0
posY: 110
sex: "women"
showchild: false
tree: "9"
x: "0"
y: "0"
}
это выводит строка
console.log(tree.person[id]);

строка
console.log(tree.person[id].posX);
выводит undefined

kva212 07.03.2016 12:17

пробовал перебирать все свойства, все есть, кроме posX и posY
они отличаются тем, что имеют числовой тип, и определяются позже в скрипте.
при загрузке присваиваются все person[i] (они НЕ содержат posX)
потом по нажатии кнопки присваиваются person[i].posX
но у меня в голову не влазит, как это может повлиять на результат и почему если отобразить весь объект - свойство есть, если конкретно это свойство - его нет.

kva212 07.03.2016 12:21

весь объект
{
BW: 5
DH: 20
DX: 8
H: 90
R: 16
TH: 4
W: 80
is_data_changed: false
links: Array[96]
mousedown: false
pathcolor: "red"
person: Object
prevX: 593
prevY: 424
state: Object
__proto__: Object
}

Coriolan161 07.03.2016 16:32

kva212,
Короче если я правильно осознал, что к чему относится, то вердикт такой
1) Делаю tree
var tree ={
BW: 5
DH: 20
DX: 8
H: 90
R: 16
TH: 4
W: 80
is_data_changed: false
links: Array[96]
mousedown: false
pathcolor: "red"
prevX: 593
prevY: 424
state: "bla-bla"
}


2) Добавляю person ( я знаю что оно добавлено. Это для пошаговости)
tree.person = {
birstday: "0000-00-00",
dead: "0",
deadday: "0000-00-00",
id: "138",
name: "Таня",
photo: "0.jpg",
posX: 0,
posY: 110,
sex: "women",
showchild: false,
tree: "9",
x: "0",
y: "0",
};

3) Сейчас я запрошу у свойства person свойство id (как ты делаешь)
tree.person['id'];
"138"

4) А теперь я запрошу у значения "138" (ибо оно есть person['id']) значение свойства posX
tree.person['id'].posX;
undefined;

5) Почему так? Потому что ты запрашиваешь свойство posX у значения свойства id объекта person !!!! Поэтому оно и undefined. Потому что нет у строки "138" такого свойства)

kva212 08.03.2016 00:16

Вы немного неверно поняли, но скрипт уже переделан, проблема исчезла.
Спасибо огромное за помощь.


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