Tengo la siguiente clase:
class Coord { constructor(x, y) { this.x = x; this.y = y } equals(b) { // how to add this method? return true; } } let p1 = new Coord(1,2); let p2 = new Coord(1,2); console.assert(p1 == p2, 'points are not equal'); ¿Hay algún método que pueda agregar a la clase de modo que p1 == p2 en lo anterior? Me gustaría hacerlo dentro de la clase y no algo así como un enfoque JSONStringify .
El equivalente en python que haría sería:
class Coord: def __init__(self, x, y): self.x = x self.y = y def __eq__(self, o): return (self.x == ox) and (self.y == oy) p1 = Coord(1,2); p2 = Coord(1,2); print (p1==p2) # TrueAhí tienes :)
class Coord { constructor(x, y) { this.x = x; this.y = y } print() { console.log('(' + `%c${this.x}` + ', ' + `%c${this.y}` + '%c)', "color:red", "color: blue", "color: black"); } equals(b) { return (this.x===bx && this.y===by); } } let p1 = new Coord(1,2); let p2 = new Coord(1,2); let p3 = new Coord(1,3); let p4 = new Coord(4,2); console.assert(p1.equals(p2), 'p1 and p2 are not equal'); console.assert(p1.equals(p3), 'p1 and p3 are not are not equal'); console.assert(p1.equals(p4), 'p1 and p4 points are not equal');Si está tratando de comparar dos instancias de la clase Coord , no podrá hacerlo dentro de la clase misma. Cómo lo tienes configurado parece un enfoque decente. También puede comparar los valores de las coordenadas antes de crear la clase.
Una alternativa
class Coord { constructor(x, y) { this.x = x; this.y = y } valueOf(b) { return `${x},${y}` } } let p1 = new Coord(1,2); let p2 = new Coord(1,2); console.assert(p1.valueOf() == p2.valueOf(), 'points are not equal');