0

Estoy creando una clase Vector2:

class Vector2 {
    constructor(x, y) {
        this.x = x
        this.y = y
    }
}

y quiero poder sumarlos por ejemplo:

new Vector2(1, 3) + new Vector2(5, 4) // Vector2(6, 7)

pero cuando lo hago me da

"[object Object][object Object]"

como lo hago?

  • 1
    Creo que a lo que va tu pregunta es saber si hay una forma mas sencilla de hacer la suma no? Yo te recomendaría que si vas a hacer muchas veces esa suma, crees un método que te haga la suma mas fácil para ti, así solo tienes que crear el código 1 vez y la puedes usar todas las veces que necesites – ignacio nicolas donoso figuero Nov 20 '20 at 17:22
  • ¿Qué has intentado? Debes proporcionar un [mcve]. – Mauricio Contreras Nov 20 '20 at 17:26

2 Answers2

1

Hay varias formas de hacer esto. La más elegante es agregar un método a tu clase que se haga cargo de realizar la suma de las propiedades que sean de tipo numérico.


En JavaSCript no todos los objetos se pueden sumar, sólo los que se pueden convertir a números. Las sumas básicas se pueden realizar usando literales numéricos o variables que devuelvan un número ya sea de forma directa o porque los objetos referidos se han convertido a número.

Cabe destacar que un "problema" con JavaScript es que el operador + se usa tanto para sumar como para concatenar.

Como tu expresión de suma está usando como operandos expresiones que devuelven objetos, JavaScript intenta convertirlos a primitivos (número, cadena de texto, entre otros) que pueda manejar. Dado que que la clase no incluye un método para hacer la conversión busca entre los prototipos el método a utilizar. En este caso el prototipo es Object y como no puede hacer la conversión a número, lo hace a una cadena de texto.

Relacionado

Recursos

Rubén
  • 10,857
  • 6
  • 35
  • 79
0

Lo puedes hacer de esta forma:

class Vector2 {
    constructor(x, y) {
        this.x = x
        this.y = y
    }
}

let vector1=new Vector2(1,2);
let vector2=new Vector2(2,2);
let suma1=vector1.x+vector2.x;
let suma2=vector1.y+vector2.y;
let sumaTotal=new Vector2(suma1,suma2);
console.log(sumaTotal)
Richard Víquez Pérez
  • 1,343
  • 1
  • 5
  • 23
  • Hola Richard, aunque esta respuesta puede servir para resolver el problema expuesto en la pregunta, ha sido marcada como de baja calidad por la comunidad debido a su extensión y contenido. Las publicaciones que son básicamente código sin una explicación clara de lo que hace no suelen ser de ayuda para otros usuarios y se consideran de baja calidad. Por favor, edita esta respuesta para añadir algo más de detalle y una explicación de lo que hace el código y cómo soluciona el problema. Lee [answer] y completa el [tour] para más información (y con ello también ganarás una nueva medalla). – Alvaro Montoro Nov 21 '20 at 03:25