The difference is that using the Object.defineProperty function you can specify options like enumerable: false so that the constructor will not appear in ‘for in’ loops
If you need for some reason to iterate the properties of a Teacher object or Teacher.prototype it might make sense to skip the constructor.
Try running this code snippet for both of the options:
let t = new Teacher(...);
for (const property in t) {
console.log(`${property}: ${t[property]}`);
}