Как создается 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
Нет больше не одной встроенной функции, где такое есть. И самому такое создать невозможно.
|