Это код, я начинаю с прототипом 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
не должны содержать одно значение, но несколько значений, и пусть каждый отдельный под-свойства 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]);
},
}
Я никогда не слышал про прокси, но это звучит интересно. Я займусь этим и вернусь к тебе позже. – Estecka
Я пропустил большую часть фона screeps, чтобы попытаться не уклониться от точки, но вернуть ее в контекст: я создал набор аксессуаров, которые помогут мне хранить и восстанавливать игровые объекты в/из памяти ползучести без нужно набирать roomObject.id или Game.getObjectById() каждый раз. – Estecka