2015-08-17 5 views
0

Я написал этот код в JavaScript:JavaScript: определение вара в конструкторе делает его непригодным для использования

var engiszik; 
 
var numOfCitizens = 10; 
 

 
function Engiszi() 
 
{ 
 
    var chance = random(0, 100); 
 
    this.type = chance < 67 ? "r" : (chance < 87 ? "o" : "p"); 
 
    this.mood = ((type === "o") ? random(60, 100, false) : (type === "p" ? random(0, 20) : random(0, 100, false))); 
 
    this.changePlace = random(0, 15, false); 
 
} 
 

 
initialize(); 
 
function initialize() 
 
{ 
 
    engiszik = []; 
 
    for(var i = 0; i < numOfCitizens; i ++) 
 
    engiszik.push(new Engiszi()); 
 
}

random корректно работает и возвращает число. Части ?: также кажутся правильными (не совсем уверен: может ли нехватка скобок вызвать в нем ошибки?).

Когда я загружаю страницу, я получаю ошибку «type not found» на линии engiszik.push(new Engiszi());. Если я удалю переменную chance из конструктора Engiszi (и все, что его использует), похоже, это сработает.

В чем причина этого? var в конструкторе меняет Engiszi на нормальную функцию вместо конструктора? Как я могу найти способ обойти это (мне действительно нужно chance, но я не хочу объявлять его как глобальную переменную, если это возможно)?

+0

var in ctor разрешено. Что-то еще смешно с вашим кодом. Поскольку вы только опубликовали его часть (ваш пример не запускается), я предполагаю, что он находится в одной из других частей. – ssube

+0

Вы посмотрели на 'return'ing от функции' Engiszi'? –

+0

может попробовать 'Math.random();' вместо просто 'random()'? –

ответ

3

Позволяет следить, где ошибка исходит от задней стенки за пределы вызова линии

"типа не найден" на линии engiszik.push(new Engiszi());

Шаг в new Engiszi(), искать type,

this.mood = ((type === "o") ? random(60, 100, false) : (type === "p" ? random(0, 20) : random(0, 100, false))); 
//   ^^^^          ^^^^ 

Где находится type? вы имели в виду this.type?

+0

Да. Я думал, что это означает тип «Engiszi», но, по-видимому, это было this.type. Добавление «этого». «тип» решил проблему. – sisisisi