Сохраняет ли Chrome конструктор каждого объекта?

В консоли Chrome JavaScript:

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

> cc = create()
Created {}

> cc
Created {}

Created это функция, частная дляcreate функция; послеcreate завершено, нет никаких (известных мне) ссылок наCreated, Тем не менее, Chrome может показывать имя функции в любое время, начиная с созданного им объекта.

Chrome не достиг этого, следуя «наивному» подходу:

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

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

и вообще я не ставилconstructor наproto аргумент переданcreate:

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

Одно предположение у меня было, что виртуальная машина JavaScript держитсяCreated радиinstanceof механизм. Он сказал, чтоinstanceof

проверяет, имеет ли объект в своей цепочке прототипов свойство prototype конструктора.

Но в приведенном выше коде я набралcreate()эффективно проходяundefined в качестве прототипа; вследствие этогоCreated даже не имеет своегоprototype установить на фактическийcc.__proto__, Мы можем проверить это, если мы взломатьcreate разоблачитьCreated функция:

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

теперь давайте наберем

> cc = create()
Created {}

> GlobalCreated
function Created() {}

> GlobalCreated.prototype
undefined

> cc instanceof GlobalCreated
TypeError: Function has non-object prototype 'undefined' in instanceof check
Мои вопросы (все тесно связаны):

Что именно движок JavaScript Chrome сохраняет для того, чтобы это представление объекта в консоли работало? Это функция конструктора или просто имя функции?

Это удержание необходимо для чего-то более существенного, чем распечатка консоли?

Каково влияние такого удержания на потребление памяти? Что если, например, функция конструктора (или даже ее имя) ненормально огромна?

Это просто Chrome? Я перепроверил Firebug и Safari, их консоли не представляют объект таким образом. Но сохраняют ли они те же данные для других возможных целей (например, из-за подлинной озабоченности, присущей JavaScript-виртуальной машине)?

Ответы на вопрос(5)

Ваш ответ на вопрос