function assert(a) { if (!a) throw Error("Bad assertion!"); } function tryChangeNonConfigurableDescriptor(x) { Object.defineProperty(arguments, 0, {configurable: false}); try { Object.defineProperty(arguments, 0, x); assert(false); } catch(e) { assert(e instanceof TypeError); } } tryChangeNonConfigurableDescriptor({get: () => {return 50;} }); tryChangeNonConfigurableDescriptor({set: (x) => {}}); tryChangeNonConfigurableDescriptor({writable: true, enumerable: false}); function tryChangeWritableOfNonConfigurableDescriptor(x) { Object.defineProperty(arguments, 0, {configurable: false}); Object.defineProperty(arguments, 0, {writable: true}); assert(Object.defineProperty(arguments, 0, {writable: false})); } tryChangeWritableOfNonConfigurableDescriptor("foo");