gpt4 book ai didi

javascript - 对所有可能的子属性的访问器进行原型(prototype)设计

转载 作者:行者123 更新时间:2023-11-28 05:13:06 24 4
gpt4 key购买 nike

这是我开始将 goal 原型(prototype)化到 Creep 类中的代码:

Object.defineProperty(
Creep.prototype,"goal",{
set :function(value){
this.memory.goal= value.id;
},
get :function() {
return Game.getObjectById(this.memory.goal);
},
}
)

现在假设我希望 Creep.goal 不包含单个值,而是包含多个值,并让 Creep.goal 的每个子属性都具有前述访问器。(这样我就可以轻松地将多个游戏对象存储到 Creep 的内存中)

这些属性是要在运行时添加的,所以我知道会有多少个属性,也不知道它们的名称,因此我不能简单地为我的每个属性复制粘贴此代码一次希望有。

我应该如何继续定义对象的所有可能属性的访问器?

-----解决方案-----

所以有人建议我为此使用代理。这对我来说是一个全新的概念,我遇到了很多困难,但我得到了一些可以按照我想要的方式工作的东西!

// 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]);
},
}

最佳答案

不太确定您的目标是什么,但如果属性确实是动态的并且必须在运行时评估,则有 Proxy Screeps 运行时支持的对象。

它的作用是允许您以编程方式拦截对象的所有消息,包括访问属性。

关于javascript - 对所有可能的子属性的访问器进行原型(prototype)设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41212242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com