【发布时间】:2021-10-22 20:47:55
【问题描述】:
我有一个Player 类,它有一些属性,如name、id、score 等...以及修改score 属性的一些方法
在执行过程中我最终将此类的几个实例保存到 JSON 文件中。稍后,我将它们导入回名为players 的数组中。为了在数组中的每个对象中检索类的方法,我执行了以下操作:
class Player {
constructor(_name,_id) {
this.name = _name;
this.age = _age;
this.score = 0;
}
addScore(x) {this.score += x}
multiplyScore(x) {this.score *= x}
removeScore(x) {this.score -= x}
}
// The function `loadFiles()` returns: [{name:"foo",id:0,score:15},{name:"bar",id:1,score:9}]
const players = loadFiles().map(x => Object.setPrototypeOf(x, Player.prototype));
通常,当我使用 setPrototypeOf() 方法时,它会返回我选择的类的实例,其中包含来自目标对象的属性值,然后如果我执行 console.log(players[0].constructor.name) 它应该打印出 Player,除了players 中的对象保持完全相同,方法没有添加到它们中,并且它们的 constructor.name 不是 Player。
PS:如果我对一个对象执行此操作而不是映射/循环遍历它们的数组,则该过程可以正常工作。
【问题讨论】:
-
您的代码实际上运行良好,您检查过
loadFiles实际返回的内容吗? -
@georg 是对的,我在答案中添加了一个 sn-p,表明它根据您在 loadFIles() 问题中发布的值工作
标签: javascript node.js class object oop