I have the following code:
function Complex(real, imaginary) {
let c = Object.create(Complex.methods);
[c.real, c.imaginary] = [real, imaginary];
return c;
}
Complex.methods = {
toString() {return `${this.real}+${this.imaginary}i`},
add(other) {
if (!(other instanceof Complex)) throw new Error("Only supports complex-only addition");
return Complex(this.real+other.real, this.imaginary+other.imaginary);
}
}
let c1 = Complex(2,0);
let c2 = Complex(3,4);
console.log(c1.add(c2) + "");
// "Uncaught Error: Only supports complex-only addition",
This is occurring because c1 instanceof Complex
is returning false
. Why does it return false?
Comparing it with using the class
keyword:
class CX {
toString() {return "xxx"}
}
let c1 = new CX();
console.log(c1 + "", c1 instanceof CX);
// xxx true
But still curious why the first one doesn't recognize the instanceof
operator.