* Update member-expression-to-functions 1. Babel using British spellings, so `memoise` 2. Provide a helper `AssignmentMemoiser` class, which will assign the memo'd value with the `n`th access. * Private properties! * Fixes * Tests * Update helper name * Fix privates that reference other privates * Don't extend a builtin * Rebase
74 lines
1.6 KiB
JavaScript
74 lines
1.6 KiB
JavaScript
class Point {
|
|
#x;
|
|
#y;
|
|
|
|
constructor(x = 0, y = 0) {
|
|
this.#x = +x;
|
|
this.#y = +y;
|
|
}
|
|
|
|
get x() { return this.#x }
|
|
set x(value) { this.#x = +value }
|
|
|
|
get y() { return this.#y }
|
|
set y(value) { this.#y = +value }
|
|
|
|
equals(p) { return this.#x === p.#x && this.#y === p.#y }
|
|
|
|
toString() { return `Point<${ this.#x },${ this.#y }>` }
|
|
|
|
}
|
|
|
|
const p1 = new Point(1, 2);
|
|
const p2 = new Point(2, 3);
|
|
const p3 = new Point(1, 2);
|
|
|
|
expect(p1.x).toBe(1);
|
|
expect(p1.y).toBe(2);
|
|
expect(p2.x).toBe(2);
|
|
expect(p2.y).toBe(3);
|
|
expect(p3.x).toBe(1);
|
|
expect(p3.y).toBe(2);
|
|
|
|
expect(p1.equals(p1)).toBe(true)
|
|
expect(p1.equals(p2)).toBe(false)
|
|
expect(p1.equals(p3)).toBe(true)
|
|
expect(p2.equals(p1)).toBe(false)
|
|
expect(p2.equals(p2)).toBe(true)
|
|
expect(p2.equals(p3)).toBe(false)
|
|
expect(p3.equals(p1)).toBe(true)
|
|
expect(p3.equals(p2)).toBe(false)
|
|
expect(p3.equals(p3)).toBe(true)
|
|
|
|
expect(p1.toString()).toBe("Point<1,2>")
|
|
expect(p2.toString()).toBe("Point<2,3>")
|
|
expect(p3.toString()).toBe("Point<1,2>")
|
|
|
|
p1.x += 1;
|
|
p1.y = 3;
|
|
p2.x -= 1;
|
|
p2.y = 3;
|
|
p3.x = 0;
|
|
p3.y = 0;
|
|
|
|
expect(p1.x).toBe(2);
|
|
expect(p1.y).toBe(3);
|
|
expect(p2.x).toBe(1);
|
|
expect(p2.y).toBe(3);
|
|
expect(p3.x).toBe(0);
|
|
expect(p3.y).toBe(0);
|
|
|
|
expect(p1.equals(p1)).toBe(true)
|
|
expect(p1.equals(p2)).toBe(false)
|
|
expect(p1.equals(p3)).toBe(false)
|
|
expect(p2.equals(p1)).toBe(false)
|
|
expect(p2.equals(p2)).toBe(true)
|
|
expect(p2.equals(p3)).toBe(false)
|
|
expect(p3.equals(p1)).toBe(false)
|
|
expect(p3.equals(p2)).toBe(false)
|
|
expect(p3.equals(p3)).toBe(true)
|
|
|
|
expect(p1.toString()).toBe("Point<2,3>")
|
|
expect(p2.toString()).toBe("Point<1,3>")
|
|
expect(p3.toString()).toBe("Point<0,0>")
|