Эта встроенная функция-конструтор вызывается каждый раз, когда мы создаем функцию в javascript.
Первые два варианта обьявления функции это эквивалент:
Тоесть мы создаем обьект, который является функций, которую можно вызывать и помощью которой мы можем создавать обьекты(она может служить функцией-конструктором).
Дело в том, что функция-конструтор всегда содержит в себе параметр prototype, этот параметр передает ссылку новосозданному этой функцией обьекту на ее прототип, и эта ссылка храниться в поле [[prototype]]. К этому параметру не определен в спецификации доступ на чтение/запись, поэтому только в ФФ мы можем читать/изменять это свойство у обьекта через __proto__. Так зачем же в javascript существует эта встроенная функция-конструктор? Суть вот в чем, как каждая функция она содержит параметр prototype, который хранит ссылку на встроенный прототип функции, в нем определены следующие методы: apply, call и наследие от базавого класса toString.
Так функции-обьекты получают эти замечательные методы.
Когда мы создаем обьект-функцию мы получаем для него:
function myFunction(arg0,arg1,...argN){...}
myFunction = function(arg0,arg1,...argN){...}
Первые два варианта обьявления функции это эквивалент:
myFunction = new Function(arg0,arg1,...argN,{...});
Тоесть мы создаем обьект, который является функций, которую можно вызывать и помощью которой мы можем создавать обьекты(она может служить функцией-конструктором).
Дело в том, что функция-конструтор всегда содержит в себе параметр prototype, этот параметр передает ссылку новосозданному этой функцией обьекту на ее прототип, и эта ссылка храниться в поле [[prototype]]. К этому параметру не определен в спецификации доступ на чтение/запись, поэтому только в ФФ мы можем читать/изменять это свойство у обьекта через __proto__. Так зачем же в javascript существует эта встроенная функция-конструктор? Суть вот в чем, как каждая функция она содержит параметр prototype, который хранит ссылку на встроенный прототип функции, в нем определены следующие методы: apply, call и наследие от базавого класса toString.
Так функции-обьекты получают эти замечательные методы.
Когда мы создаем обьект-функцию мы получаем для него:
myFunction.[[prototype]] == {call: function(){...}, apply: function(){...}, ... toString: function(){}}
myFunction.prototype == {}// пустой обьект, на который все созданные этой функцией обьекты получают ссылку как на свой прототип.
Комментариев нет:
Отправить комментарий