понедельник, 14 февраля 2011 г.

Встроеная функция Function

Эта встроенная функция-конструтор вызывается каждый раз, когда мы создаем функцию в javascript.

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 == {}// пустой обьект, на который все созданные этой функцией обьекты получают ссылку как на свой прототип.

Комментариев нет:

Отправить комментарий