Siempre pensé que un prototype tenía algo de magia, pero parece que un prototipo es en realidad solo un objeto adjunto a una función. Como ejemplo:
function someMethod() {}; function Person(name) { Object.assign(this, {name}); } Person.prototype.number = 4; Person.prototype.letter = "a"; Person.prototype.method = someMethod; let obj = { number:4, letter:'a', method: someMethod }; console.log(`\ ${Object.entries(Person.prototype).toString()} ${Object.entries(obj).toString()} ${Object.entries(Person.prototype).toString() == Object.entries(obj).toString()}\ `); ¿Es eso más o menos una comprensión correcta de lo que es el prototipo? ¿O hay alguna otra maquinaria detrás de escena que el obj en el ejemplo anterior no incluye?
De hecho, un objeto .prototype es solo un objeto ordinario. Se utiliza en cadenas de prototipos como se puede utilizar cualquier otro objeto en ellas.
La única "magia" detrás de los objetos .prototype creados implícitamente en las function es que tienen una propiedad .constructor no enumerable que apunta a la función.
function Person() {} let obj = {}; console.log(Object.hasOwn(obj, 'constructor')); console.log(Object.hasOwn(Person.prototype, 'constructor'));