Я думаю, что, возможно, обнаружил ошибку в Google Chrome (16.0.912.75 м, последняя стабильная на момент написания статьи).
var FakeFancy = function () {};
console.log(new FakeFancy());
var holder = {
assignTo : function (func) {
holder.constructor = func;
}
};
holder.assignTo(function () { this.type = 'anonymous' });
var globalConstructor = function () { this.type = 'global' }
console.log(new holder.constructor());
Если вы запускаете этот блок в Firefox, он показывает оба в списке как «Объект», а второй имеет тип = локальный, довольно хорошо. Но если вы запустите его в Chrome, он покажет
> FakeFancy
> globalConstructor.type
Если вы расширите деревья, содержимое будет правильным. Но я не могу понять, что Chrome перечисляет в качестве первой строки для каждого зарегистрированного объекта. Поскольку я не манипулирую прототипами, это должны быть простые старые объекты, которые нигде не наследуются.
Сначала я думал, что это связано с WebKit, но я попробовал в последнем Safari для Windows (5.1.2 7534.52.7), и оба отображаются как «Объект».
Я подозреваю, что он пытается угадать, откуда был вызван конструктор. Неправильная ли анонимность конструктора портит это?