这是我开始制作原型的代码
goal
进入
Creep
类别:
Object.defineProperty(
Creep.prototype,"goal",{
set :function(value){
this.memory.goal= value.id;
},
get :function() {
return Game.getObjectById(this.memory.goal);
},
}
)
现在,让我们假设我想要
Creep.goal
不包含单个值,而是包含多个值,并让
爬行
具有上述访问器。
(因此,我可以轻松地将多个游戏对象存储到怪物的内存中。)
不要
知道会有多少,也不知道他们的名字,因此我不能简单地为我想要的每个属性复制粘贴一次代码。
如何定义的访问器
一切可能
对象的属性?
-----解决方案-----
所以有人建议我使用
Proxy
为了这个。这对我来说是一个全新的概念,我遇到了很多困难,但我得到了我想要的东西!
// Prototyping goal as a proxy
Object.defineProperty(
Creep.prototype,"goal",{
get :function()
{return new Proxy(this.memory.goal, objectInMemory) }
}
)
// Proxy's Handler (my previous accessors)
const objectInMemory= {
set(goal, property, value){
goal[property] = value.id;
return true;
},
get(goal, property){
return Game.getObjectById(goal[property]);
},
}