O Chrome mantém o construtor de cada objeto?

No console JavaScript do Chrome:

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

> cc = create()
Created {}

> cc
Created {}

Created é uma função privada para ocreate função; depois decreate for concluída, não há referências (conhecidas por mim) aCreated. No entanto, o Chrome pode mostrar o nome da função a qualquer momento, começando no objeto criado por ela.

O Chrome não conseguiu isso seguindo a abordagem "ingênua":

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

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

e de qualquer maneira, eu não coloqueiconstructor noproto argumento passado paracreate:

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

Um palpite que tive é que a VM JavaScript se apega aCreated por uma questão deinstanceof mecanismo. Dizem queinstanceof

testa se um objeto tem em sua cadeia de protótipos a propriedade prototype de um construtor.

Mas no código acima eu digiteicreate()passando efetivamenteundefined como protótipo; consequentementeCreated nem sequer tem o seuprototype definido para o realcc.__proto__. Podemos verificar isso se hackearmoscreate expor oCreated função:

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

agora vamos digitar

> cc = create()
Created {}

> GlobalCreated
function Created() {}

> GlobalCreated.prototype
undefined

> cc instanceof GlobalCreated
TypeError: Function has non-object prototype 'undefined' in instanceof check
Minhas perguntas (todas estreitamente relacionadas):

O que exatamente o mecanismo JavaScript do Chrome mantém para fazer com que a apresentação do objeto no console funcione? É a função construtora ou apenas o nome da função?

Essa retenção é necessária para algo mais substancial do que a impressão do console?

Qual é o efeito dessa retenção no consumo de memória? E se, por exemplo, a função construtora (ou mesmo o nome) for anormalmente grande?

É apenas o Chrome? Testei novamente com o Firebug e o Safari, seus consoles não apresentam o objeto dessa maneira. Mas eles ainda retêm os mesmos dados para outros fins possíveis (por exemplo, devido a uma preocupação genuína inerente a uma VM JavaScript)?

questionAnswers(5)

yourAnswerToTheQuestion