trabajar con arrays/objetos, en este caso añadir:
Código
eval("$HERO." + group + ".push('" + item.id.replace("Check","") + "')")
eliminar objetos
Código
eval("delete $HERO." + item[0]);
operaciones
Código
eval("$HERO.skills." + skill + "" + operator + "=" + countSkill);
Código
En este caso quiero mostrar en el objeto $ELEMENTSPOINTS el elemento de su tipo, se que se puede hacerse así:
eval("$ELEMENTSPOINTS." + type + "." + element);
Código
pero es solo para mostrar el subobjecto ELEMENTSPOINTS con todas sus propiedades, pero no el valor de uno en concreto.
$ELEMENTSPOINTS[type];
Utilizo tanto el eval(), porque es dinamico, todos los eval estan dentro de una funcion que contiene parametros, cuyos parametros los utilizo en el eval(). Como lo hago sin utilizarlo?
Los objetos, son los siguientes:
Código
$HERO={ name:null, magic:[], weapons:[], gems:[], skills:{ attack:0, defenser:0, speed:0 } } const $ELEMENTSPOINTS={ magic:{ // + lightning:{ attack:10 }, ice:{ attack:4, defenser:3 }, fire:{ attack:8 }, wind:{ defenser:2 } }, weapons:{ sword:{ attack:5, speed:1 // the speed substraction in the operation }, shield:{ defenser:10, speed:5 }, hatchet:{ attack:10, speed:4 }, crossbow:{ attack:7, speed:3 } }, gems:{ // + diamond:{ lightning:2, ice:3, fire:5, wind:4 }, esmerald:{ lightning:2, ice:3, fire:5, wind:4 }, ruby:{ lightning:3, ice:2, fire:3, wind:2 }, sapphire:{ lightning:2, ice:2, fire:3, wind:4 } } }
Un ejemplo de cuando utilizo eval:
Código
ActionSkills = (type,element,operator)=>{ if(type != "gems"){ /* The buttons' group aren't gems, so all skills' type got by the specificed element's sub-objects are iterated, and each iteration gets skill's number and if the skill's type is 'speed' and operator is '+' the operator is become to '-' (because the speed substraction of speed's total count), else if the operator is '-', it is became in '+' (because the button is inactive). Finally is add/substraction the value get with the skill's total specificed. Thanks to eval() Also, if the button's group clicked is 'magic', apart from does previous it, this runs the function ActionGems() */ for(skill in eval("$ELEMENTSPOINTS." + type + "." + element)){ countSkill = eval("$ELEMENTSPOINTS." + type + "." + element + "." + skill); //console.log(skill + ":" + countSkill); (skill == "speed" && operator == " + ")?(operator = "-"):(skill == "speed" && operator == "-")?(operator = " + "):null; eval("$HERO.skills." + skill + "" + operator + "=" + countSkill); } (type == "magic")?ActionGems(type,element,operator):null; }else{ /* As are gems, the operation is different. So this executes the function ActionGems() */ ActionGems(type,element,operator); } }
Gracias de antemano