class X { constructor() { Object.defineProperty(this, "prop1", { configurable: true, writable: false, value: 1 }); Object.defineProperty(this, "prop2", { configurable: true, get: function() { return 15; } }); Object.defineProperty(this, "prop3", { configurable: true, set: function(a) { } }); Object.defineProperty(this, "prop4", { configurable: true, get: function() { return 20; }, set: function(a) { } }); } f1() { super.prop1 = 2; } f2() { super.prop2 = 3; } f3() { super.prop3 = 4; } f4() { super.prop4 = 5; } } var x = new X(); assertThrowsInstanceOf(() => x.f1(), TypeError); assertEq(x.prop1, 1); assertThrowsInstanceOf(() => x.f2(), TypeError); assertEq(x.prop2, 15); assertThrowsInstanceOf(() => x.f3(), TypeError); assertEq(x.prop3, undefined); assertThrowsInstanceOf(() => x.f4(), TypeError); assertEq(x.prop4, 20); if (typeof reportCompare === 'function') reportCompare(0,0,"OK");