Итак, функции имеют тип Object и поэтому могут иметь свойства. По умолчанию функция F будет иметь имя, длину и свойство prototype, а свойство prototype по умолчанию будет установлено на объект, имеющий один ключевой «конструктор», который указывает на саму функцию. то есть
function F() {
this.foo = "bar";
}
/* default prototype
F.prototype = { constructor: F};
*/
Это можно проверить, запустив console.log(Object.getOwnPropertyDescriptors(F.prototype));
, который выдает
{
constructor: {
value: [Function: F],
writable: true,
enumerable: false,
configurable: true
}
}
, а F.prototype.constructor == F
оценивается как true.
Что сбивает с толку, так это то, что console.log(F.prototype);
выведет только пустой объект F {}
Аналогично console.log(Object.getOwnPropertyDescriptors(F));
выдаст следующее:
{
length: { value: 0, writable: false, enumerable: false, configurable: true },
name: {
value: 'F',
writable: false,
enumerable: false,
configurable: true
},
prototype: {
value: F {},
writable: true,
enumerable: false,
configurable: false
}
}
Почему это что они возвращают пустой объект F {}
, когда я ожидал что-то вроде { constructor: [Function: F] }
?