2014-11-15 4 views
0

Привет, я 14-летний программист. Я просто потратил некоторое время на создание мод для Minecraft Pocket Edition, используя что-то вроде ModPe. ModPe предоставляет мне набор функций, которые я могу использовать вместе с JavaScript. В любом случае, я не вижу ничего плохого в своем коде, поэтому я и прихожу сюда. Вот оно:JavaScript: Почему свойство объекта равно undefined?

if (entityIsPassiveMob(entityId)) { // only add entity to list of entitys if entity is a passive mob 
    var entityData = 1; // variable to be used with properties, it is set to 1 to become an object. An exception can't have a property because its not an object. 
    entityData.flyType = random(1, 4); // 1 = rocketers, 2 = magical, 3 = dizzy, 4 = tired 
    entityData.rocketers = []; 
    entityData.magical = [random(1, 10)]; // amountBlocksAboveGround 
    entityData.dizzy = []; 
    entityData.tired = random(1, 4); // amountBlocksAboveGround 
    listEntitys.push([entityId, entityData]); // push needed data into array 
    clientMessage("added entity as " + entityData.flyType); // this prints undefined in Minecraft PE's chat box :/ 
} 

Я ценю вашу помощь! Свойство object flyType в основном не определено, не знает, что другие равны, но, скорее всего, не определено.

ответ

2

entityData не является объектом. Это номер. Поскольку число является примитивным, оно не может иметь свойств. Следовательно, когда вы получаете доступ (чтение/запись) одного из своих свойств, создается временный объект с автоматическим полем Number и сразу же отбрасывается (после вычисления выражения).

Таким образом, вы не получаете доступ к одному и тому же объекту, а не к другим временным объектам при работе на вашем entityData.

Решение: сделать его в надлежащий непримитивных объект вместо:

var entityData = {}; 

Если вы хотите быть элегантными, а также, вы можете инициализировать его свойство по умолчанию, так как объект литералы позволяют это тоже:

var entityData = { 
    flyType: random(1, 4), 
    rocketers: [], 
    magical: [ random(1, 10) ] 
}; 
+0

Можете проверить этот синтаксис. ;-) 'flyType: random (1, 4),' – RobG

+0

спасибо! У меня действительно есть чему поучиться. –

+0

@ RobG ugh, спасибо за исправление! было поздно ночью, и я испортил синтаксис. Исправлена! –

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