Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как создается function Function(){} ? (https://javascript.ru/forum/misc/61253-kak-sozdaetsya-function-function-%7B%7D.html)

Cepairda 10.02.2016 15:03

Как создается function Function(){} ?
 
function Function(){}// new Function -> Function.__proto__ = Function.prototype; Function.prototype = {__proto__: Object.prototype};

Это единственная Функция-конструктор у которой ее prototype == __proto__. Как это получается не понятно. Со всеми остальными разобрался, к примеру Array:

Создается функция-конструктор(при это происходит создание через new Function). В Array.__proto__ записывается = Function.prototype; Вот собственно и все.
Но чепуха получается с Function.
function Function(){}// new Function -> Function.__proto__ = Function.prototype; Function.prototype = {__proto__: Object.prototype};
Получается еще не создался, но при создании уже записывает в __proto__ свой же Function.prototype, которого еще как бы нет, как так ?

Попытаюсь изложить еще более ясно:

в самом языке есть функция-конструктор function Function(){}

Теперь суть следующая, когда мы пишем var arr = [2,3];на самом деле на уровне языка это var arr = new Array(2,3);
Когда мы пишем var obj = {};то для языка это var obj = new Object();

когда мы создаем функцию, например function Test(){}, то для языка это new Function();

new Array(2,3);
Array - функция-конструктор языка;имеет вид как и все функции
function Array(){}

Создается с помощью как и все функции с помощью функции-конструктора new Function
И при создании new Function, в Array.__proto__ = Function.prototype

Все функции создается с помощью new Function
function Object(){}, function Array(){}, function Number(){}, function String(){}, все функции в общем и свои и встроенные в сам язык так создаются

new Function(), здесь Function - это функция - конструктор, то есть тоже функция имеющая вид function Function(){}
Вот тут то и наступает тупик. Все функции создается с помощью new Function
Но как может создаться с помощью new Function сам function Function, Function еще не существует, его не создали, нет такой функции конструктора
Некоторые говорят, что это особенность языка, и оно создается другим образом, но как я не нашел ответ
new Function не может создать function Function, по той причини что new Function(ЕГО нет, мы его и создаем)
Мы не можем вызвать то, чего еще нет. И да я начал склонять к тому, что это особенность языка, потому что есть очень интересный момент
Function.__proto__ == Function.prototype
Нет больше не одной встроенной функции, где такое есть. И самому такое создать невозможно.


Часовой пояс GMT +3, время: 15:48.