Свойство prototype
объектов функций создается автоматически, это просто пустой объект с атрибутами свойств {DontEnum}
и {DontDelete}
, вы можете увидеть, как объекты функций создаются в спецификации:
Обратите внимание на шаги 9, 10 и 11:
9) Создайте новый объект, который будет построен по выражению new Object()
.
10) Установите для свойства конструктора Результата (9) значение F. Это свойство имеет атрибуты { DontEnum }
.
11) Установите свойство прототипа F в Результат (9). Это свойство имеет атрибуты, указанные в 15.3.5.2 .
Вы можете увидеть, что это так:
function f(){
//...
}
f.hasOwnProperty('prototype'); // true, property exist on f
f.propertyIsEnumerable('prototype'); // false, because the { DontEnum } attribute
delete f.prototype; // false, because the { DontDelete } attribute