JavaScript 对象在创建时会变得疯狂
JavaScript object goes crazy upon creation?
我目前正在用Javascript开发一个多人游戏,我的PlayerList数据结构/对象似乎有一个非常特殊的问题。
这是对象:
var PlayerList = function(){
this.list = {};
}
该对象有几个我通过执行添加的方法...
PlayerList.prototype.method = function(){...}
这些方法是:addPlayer,removePlayer,playerInList,findPlayer,jsonify和unjsonify。我在取消jsonify方面遇到了很大的问题。这是代码:
PlayerList.prototype.unjsonify = function(jsonList){
var object = JSON.parse(jsonList);
var li = new PlayerList();
console.log(li.list.x);
console.log(li.list.y);
console.log(li.list);
//insert the fake player objects from the fake list into the new list as real player objects
for(p in object.list){
var pObj = object.list[p];
//create real player object
var player = new Player(pObj.name, pObj.x, pObj.y, pObj.velX, pObj.velY);
li.addPlayer(player);
}
return li;
}
这样做的原因是,如果我只是解析服务器发送的 jsonList 对象,则生成的对象具有正确的结构,但没有 PlayerList 应该具有的任何方法。
问题是:我后来注意到,当我浏览 PlayerList.list 并绘制每个玩家时,我收到此错误:
未捕获的类型错误:对象 NaN 没有方法"getX"
事实证明,出于某种原因,当我在unjsonify中创建一个新的PlayerList时,它有两个额外的字段x和y,都设置为NaN。问题出现在这里:
PlayerList.prototype.unjsonify = function(jsonList){
var object = JSON.parse(jsonList);
var li = new PlayerList();
出于某种非常奇怪的原因,li 并不是一个新的空玩家列表。它包含两个额外的变量,x 和 y,都设置为 NaN。更奇怪的是,它不仅不是一个新的空列表,它还包含当前在服务器上的所有玩家 - 这对我来说似乎是不可能的,因为客户端第一次获得包含 json 玩家列表的包时,它甚至没有过去的版本自己的版本可以删除。
最重要的是,如果您查看unjsonify的代码块,console.log(li.list.x)和console.log(li.list.y)都输出未定义,但随后console.log(li.list)输出一个对象,该对象(除了服务器上的所有玩家)字段x和y设置为NaN。
我完全不知道这怎么会发生。似乎没有人可以解决这些错误之一,因为它们没有任何意义。但是,如果有人对如何帮助我有丝毫想法,将不胜感激!
我应该注意,在我拥有这个 PlayerList 对象之前,我只是使用了一个没有任何方法的对象原语,并手动执行了所有操作(例如 pList.username = 播放器添加玩家等)并且一切正常(我可以看到其他玩家在我的屏幕上移动,等等)。但是由于在这一点上它变得非常大,我想添加一些结构,因此我创建了这个 PlayerList 对象,它应该使我的代码更加结构化和漂亮,但到目前为止只引起了比其他任何事情都多的问题。
您的 PlayerList 没有 .addPlay 方法。
使用代码时,可以更轻松地在变量可读的位置命名变量。
function PlayerList() {
this.list = [];
};
//
PlayerList.prototype.unjsonify = function (jsonList) {
var jsonLst = JSON.parse(jsonList),
myPlayerList = new PlayerList(),
player,
jsonItem;
//
for (var i = 0; i < jsonLst.list.length; i++) {
jsonItem = jsonLst.list[i];
//
player = new Player(jsonItem.name, jsonItem.x, jsonItem.y, jsonItem.velX, jsonItem.velY);
myPlayerList.list.push(player);
};
return myPlayerList;
};
我已经将您的 Player.list 从对象更改为数组。
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 全局变量和全局对象的属性之间有什么区别吗
- 比较从函数和生成的日期对象
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何使用json将对象列表从java转换为javascript
- 序列化数据属性中对象的最可靠方法
- 如何访问声音管理器2创建的声音对象
- FabricJs-限制主对象内添加对象的移动区域
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 值对象在某个变量发生更改后发生更改
- 当我JSON.stringfy(对象)时,我得到一个疯狂的字符串作为值
- JavaScript 对象在创建时会变得疯狂