2017-04-16 88 views
1

我正在构建一个基于网页的文本冒险游戏,比如银河系漫游指南或Zork系列。我在本场比赛中保存物品,比如场地或玩家数据,放在localStorage中,这样玩家可以继续进行比赛。如何更改Javascript对象的类型?

我正在使用CircularJSON将这些对象中的循环引用串起来以保存它们。

但是,当这些对象被解析时,它们是默认的对象类型。

这是一个问题,因为像在类型的功能:

var Area = function (tempdescription, tempinitialDesc, tempobjArr) { 
    this.isExplored = false; 
    this.description = tempdescription; 
    this.objArr = tempobjArr; 
    this.paths = []; 
    this.initialDesc = tempinitialDesc; 
}; 
Area.prototype.getIndex = function (tempstr) { 
    if(thePlayer.playerLocation.objArr.length > 0) { 
     for(var i = 0; i < thePlayer.playerLocation.objArr.length; i++) { 
      if(thePlayer.playerLocation.objArr[i].name.indexOf(tempstr) != -1) { 
       return i; 
      } 
     } 
    } 
    return -1; 
}; 

球员

这是由我创建
var Player = function (defaultLocation) { 
    this.inv = []; // an array of game objects 
    this.playerLocation = defaultLocation; // the player's current location 
    this.moveCount = 0; 
    this.score = 0; 
}; 

Player.prototype.getIndex = function (tempstr) { 
    if(thePlayer.inv.length > 0) { 
     for(var i = 0; i < thePlayer.inv.length; i++) { 
      if(thePlayer.inv[i].name.indexOf(tempstr) != -1) { 
       return i; 
      } 
     } 
    } 
    return -1; 
}; 

,需要存在于每个对象为了我的其他代码的工作。

我需要以简单的方式更改几个对象的类型(如果存在),因为当我保存这些对象时,在游戏完成时可能会有几十个对象。

有没有什么办法可以改变Javascript对象的类型?

+0

您好!欢迎来到SO。你应该检查出https://stackoverflow.com/help/how-to-ask来改善你的问题。考虑添加示例代码以及您尝试过的内容。 –

+0

我添加了一些代码,我还没有尝试过任何东西,因为我不知道从哪里开始。感谢您的反馈。 – finnty

+0

开始搜索:http://stackoverflow.com/search?q=javascript+change+object+type然后尝试,然后问什么时候失败? – yezzz

回答

0

选项#1(使用ES2015):const newObject = Object.setPrototypeOf(oldObject, Player.prototype)

这是相当缓慢的,虽然,检查documentation

警告:更改[[原型]]一个目的是,通过现代JavaScript引擎在每个浏览器和JavaScript引擎中优化属性访问的性质,这是非常缓慢的操作。

这是一个替代...

选项#2(不推荐):oldObject.__proto__ = Player.prototype

选项#3:const newObject = new Person(/* Use the properties of oldObject */)

+0

“const”是什么意思,它与“var”有什么不同? – finnty

+0

这是一个完全不同的问题。为了改变一个对象的类型,你可以使用你喜欢的任何东西,无论是'const','let'还是'var'。他们是ES2015/ES6功能。如果你想了解它们,请查看ES6简介https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const –