¿Conserva Chrome el constructor de cada objeto?

En la consola de JavaScript de Chrome:

> function create(proto) {
    function Created() {}
    Created.prototype = proto
    return new Created
  }
undefined

> cc = create()
Created {}

> cc
Created {}

Created Es una función privada de lacreate función; despuéscreate completa, no hay referencias (conocidas para mi) aCreated. Sin embargo, Chrome puede mostrar el nombre de la función en cualquier momento, a partir del objeto creado por ella.

Chrome no logró esto siguiendo el enfoque "ingenuo":

> cc.constructor
function Object() { [native code] }

> cc.toString()
"object [Object]"

y de todos modos, no me puseconstructor sobre elproto argumento pasado acreate:

> cc.__proto__.hasOwnProperty("constructor")
false

Una suposición que tuve es que la máquina virtual de JavaScript se mantiene enCreated por el bien de lainstanceof mecanismo. Se dice queinstanceof

comprueba si un objeto tiene en su cadena prototipo la propiedad prototipo de un constructor.

Pero en el código anterior escribícreate()pasando efectivamenteundefined como prototipo; por consiguienteCreated ni siquiera tiene suprototype establecer en el realcc.__proto__. Podemos verificar esto si hackeamoscreate para exponer elCreated función:

function create(proto) {
  function Created() {}
  Created.prototype = proto
  GlobalCreated = Created
  return new Created
}

ahora vamos a escribir

> cc = create()
Created {}

> GlobalCreated
function Created() {}

> GlobalCreated.prototype
undefined

> cc instanceof GlobalCreated
TypeError: Function has non-object prototype 'undefined' in instanceof check
Mis preguntas (todas muy relacionadas):

¿Qué retiene exactamente el motor de JavaScript de Chrome para hacer que la presentación del objeto en la consola funcione? ¿Es la función constructora, o simplemente el nombre de la función?

¿Es necesaria esa retención para algo más importante que la impresión de la consola?

¿Cuál es el efecto de dicha retención en el consumo de memoria? ¿Qué sucede si, por ejemplo, la función constructora (o incluso su nombre) es anormalmente enorme?

¿Es solo Chrome? He vuelto a probar con Firebug y Safari, sus consolas no presentan el objeto de esa manera. ¿Pero aún conservan los mismos datos, para otros posibles propósitos (por ejemplo, debido a una preocupación genuina inherente a una máquina virtual de JavaScript)?

Respuestas a la pregunta(5)

Su respuesta a la pregunta