Is this function really necessary? The default of Object.defineProperty is already writable: false. You could just reduce to:

`Object.defineProperty(this, field, { enumerable: true, value: val })`

But this is just a suggestion, I'm fine with this either way.