2015-02-24 3 views
0

Это в основном две ошибки, но они идут рука об руку, так как вторая ошибка восходит к первому одинне может установить/прочитать свойство не определено

неперехваченным TypeError: Не удается установить свойство «Игроки» неопределенной

Uncaught TypeError: не удается прочитать свойство «CreatePlayer» неопределенной

var TotalPlayers = 0; 
Player.Players = []; 

Player.CreatePlayer = function (name, Class, rank) { 
    TotalPlayers ++; 
    Player.Players[TotalPlayers] = { 
     name: name, 
     Class: Class, 
     rank: rank 
    }; 
    Player[name] = new Player(name, Class, rank); 
}; 

Существует больше кода, чем это, но это должно быть только части необходимо

+0

как вы определяете 'Player'? – Grundy

+0

Объект игрока определен в виде полного кода здесь: http: //exitium.esy.es/project/entity.js –

+0

момент, когда нужно использовать 'function Player() {...}' вместо 'var Player = function () {...} ':-) – Grundy

ответ

1

Где вы объявляете, что такое Player? С кодом Вы представляете, вы теряете свою инициализацию:

var Player = { 
    Players: [] 
}; 
var TotalPlayers = 0; 

Я просто прочитать код размещен, Player определяется после использовать его в первый раз, так что на самом крайней мере, вы должны переместить следующий к началу:

var Player = function(name, Class) { 
    // ... 
}; 

Другим вариантом был бы объявить его с помощью функции оператора:

function Player(name, Class) { ... }; 

Это даст вам тот же результат, и поскольку в функциях javascript сначала оцениваются, имя всегда будет доступно. Вы можете узнать больше о Function Declarations vs. Function Expressions.

1

Попробуйте добавить var Player = {} после (или до) var TotalPlayers = 0;

в дополнении вместо подсчета всех игроков вы можете просто нажать их в массив:

Player.Players.push({ 
     name: name, 
     Class: Class, 
     rank: rank 
    }); 
Смежные вопросы