Как создается 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, время: 19:35. |