Porque ha reemplazado completamente el objeto prototype
original de f
con un objeto simple. Era el objeto original prototype
que contenía la referencia a f
a través de la propiedad .constructor
.
El constructor de un objeto creado utilizando la sintaxis literal del objeto será el constructor Object
.
Para recuperarlo, debe colocarlo allí manualmente.
f = function() {};
f.prototype = {};
f.prototype.constructor = f;
thing = new f;
Esto sombra sobre la propiedad .constructor
en la cadena de prototipo del nuevo objeto prototipo.
Si borra esa propiedad, obtendrá Object
nuevamente.
delete f.prototype.constructor;
console.log(thing.constructor); // Object