Source code

Revision control

Copy as Markdown

Other Tools

var shouldBeThis;
class A {
#nullReturn = false;
constructor(nullReturn) {
this.#nullReturn = nullReturn;
}
#calls = 0;
#z =
() => {
assertEq(this, shouldBeThis);
this.#calls++;
// To test the second optional below.
if (this.#nullReturn && this.#calls == 2) {
return null;
}
return this;
}
static chainTest(o) {
o?.#z().#z()?.#z();
}
};
for (var i = 0; i < 1000; i++) {
var a = new A();
shouldBeThis = a;
A.chainTest(a);
A.chainTest(null);
var b = new A(true);
shouldBeThis = b;
A.chainTest(b);
}