let superArrow; let thisArrow; let thisStash; class base { constructor() { // We run this constructor twice as part of the double init check if (!thisStash) thisStash = {prop:45}; return thisStash; } } class foo extends base { constructor() { superArrow = (()=>super()); thisArrow = ()=>this; } } // Populate the arrow function saves. Since we never invoke super(), we throw assertThrowsInstanceOf(()=>new foo(), ReferenceError); // No |this| binding in the closure, yet assertThrowsInstanceOf(thisArrow, ReferenceError); // call super() superArrow(); // Can't call it twice assertThrowsInstanceOf(superArrow, ReferenceError); // Oh look, |this| is populated, now. assertEq(thisArrow(), thisStash); if (typeof reportCompare === 'function') reportCompare(0,0,"OK");