The getter of the class sits on the .prototype
object, not on this
, that’s why your attempt to delete
it fails (and, as Jeremy points out, it is not deletable).
You can however simply create an own property on the instance that shadows the getter:
class a {
get b() {
Object.defineProperty(this, "b", { value: 1, writable: false, configurable: true })
return this.b;
}
}
var c = new a;
console.log(c.b); // 1
We have to use Object.defineProperty()
as a simple assignment would find the inherited property that has no setter and throws.