obj
не функция, это объект, созданный с помощью оператора new
. FunctionCreator
- это функция, но она не создает функций. Простое создание его прототипа Function.prototype
не делает то, что он создает, функции, это просто заставляет объект наследовать свойства, которые нельзя использовать с пользой, потому что это не функция.
[[Call ]] метод определен в Function.prototype ...
Это может быть то, что вы неправильно поняли. Function.prototype
имеет метод call
, но это не внутренний метод [[Call]] . Это просто метод под названием call
. [[Call]] недоступен извне (и в зависимости от реализации механизма JavaScript он может не существовать буквально; это механизм спецификации).
Для создания функции вы используете объявление функции , выражение функции, определение метода и т. д. c. ( подробнее здесь ); или, если вы не можете их избежать и знаете, какие опасности с ними связаны, eval
или new Function
.