Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

109
Vistas
JavaScript: objetos secundarios llamados por funciones para actualizar objetos secundarios

Estoy aprendiendo sobre los objetos y sus alcances, me confundí y decidí hacer una hoja de personaje de D&D Pathfinder para practicar.

Hice la hoja de personaje como un objeto, objetos secundarios para puntajes de habilidad, fuerza/destreza/inteligencia/etc... y luego valores base y modificadores.

en D&D usas tu valor base para calcular el valor de tu modificador y el modificador se usa a lo largo del juego. El cálculo del modificador es (base - 10) / 2

mientras ejecuto esto, solo obtengo 0 cuando se llama console.log(characterSheet.abilityScore.strength.modifier)

Supongo que mi confusión es sobre mi comprensión del rango de alcance entre la función y el modificador/base. pero no estoy seguro de por dónde empezar.

 const characterSheet = {
 abilityScore: {
 strength: {
 base: 2,
 modifier: 0,
 calcMod: function () {
 this.modifier = Math.floor((this.base - 10) / 2);
 },
 },
 dexterity: {
 base: 8,
 modifier: 0,
 calcMod: function () {
 this.modifier = Math.floor((this.base - 10) / 2);
 },
 },
 intelligence: {
 base: 16,
 modifier: 0,
 calcMod: function () {
 this.modifier = Math.floor((this.base - 10) / 2);
 },
 },
 },
}

También intenté colocar la función en el ámbito global, pero siempre devuelve NaN.

 const characterSheet = {
 abilityScore: {
 strength: {
 base: 2,
 modifier: function () {
 return calcMod(this.base);
 },
 strength: {
 base: 8,
 modifier: function () {
 return calcMod(this.base);
 },
 },
 strength: {
 base: 16,
 modifier: function () {
 return calcMod(this.base);
 },
 },
 },
}};
function calcMod(val) {
 return Math.floor((val - 10) / 2);
}

console.log(calcMod(characterSheet.abilityScore.strength));

almost 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

puedes usar eso... ?

 const characterSheet =
 { abilityScore: 
 { strength:
 { base : 2
 , modifier : 0
 }
 , dexterity: 
 { base : 8
 , modifier : 0
 }
 , intelligence: 
 { base : 16
 , modifier : 0
 }
 , calcMod ( ability )
 { 
 return this[ability].modifier = 0 | ((this[ability].base - 10) / 2); 
 } } } 

console.log( characterSheet.abilityScore.calcMod( 'strength' ) )

console.log( characterSheet.abilityScore.strength.modifier )

O:

 const characterSheet =
 { abilityScore: 
 { strength : { base : 2, modifier : 0 }
 , dexterity : { base : 8, modifier : 0 }
 , intelligence : { base : 16, modifier : 0 }
 } };
 
function calcMod( val ) 
 {
 return val.modifier = 0 | ((val.base - 10) / 2);
 }

console.log( calcMod( characterSheet.abilityScore.strength ))

almost 4 years ago · Santiago Trujillo Denunciar

0

Deberías usar

 function buildScore(base) {
 return {
 base,
 modifier: Math.floor((base - 10) / 2),
 };
}
const characterSheet = {
 abilityScore: {
 strength: buildScore(2),
 dexterity: buildScore(8),
 intelligence: buildScore(16),
 },
};

console.log(characterSheet.abilityScore.strength);

Sin métodos, sin problemas. También podría lograr algo como esto con captadores, pero sería mucho más complicado.

almost 4 years ago · Santiago Trujillo Denunciar

0

Puede usar un captador para modifier que llame a calcMod() . Esto llama a una función para devolver el valor de la propiedad, de modo que pueda calcularlo en función del valor actual de this.base .

 function calcMod(val) {
 return Math.floor((val - 10) / 2);
}

const characterSheet = {
 abilityScore: {
 strength: {
 base: 2,
 get modifier() {
 return calcMod(this.base);
 }
 },
 dexterity: {
 base: 8,
 get modifier() {
 return calcMod(this.base);
 }
 },
 intelligence: {
 base: 16,
 get modifier() {
 return calcMod(this.base);
 }
 },
 },
}

console.log(characterSheet.abilityScore.dexterity.modifier);
characterSheet.abilityScore.dexterity.base = 10;
console.log(characterSheet.abilityScore.dexterity.modifier);

almost 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda