С 5 точки можем да видим как функциите са само обекти вътрешно в JavaScript.
Функциите са обекти в JavaScript. Можем да ги предаваме като обекти, като съдържащи данни. Освен че изпълняват операции като функция, те се съхраняват вътрешно като данни.
Функция в JavaScript е обект, защото,
- Функциите съдържат свойства като обекти
- Можем да добавим нови свойства или да прочетем свойствата
- Можем да предадем функция на друга функция заедно с нейните свойства и данни
- Можем да върнем функция заедно с нейните свойства и данни
- Той принадлежи към веригата прототипи на JavaScript
Приказките са евтини, покажете ми вашия код
Нека видим тези твърдения в действие,
Функциите съдържат свойство
Можем да получим име на функция точно като свойствата на обекта,
function getBestRockBandInBd() { return 'Warfaze'; }
console.log(getBestRockBandInBd.name); // getBestRockBandInBd
Тук виждаме, че когато създаваме функция, тя има свойството name
, което може да бъде отпечатано точно като свойствата на обекта.
Когато създаваме функция, тя вътрешно създава обект със следните свойства,
- Код (Можем да ги извикаме с помощта на
functionName()
) - име (запазено името на функцията, неприложимо за функциите със стрелки)
Можем да добавим нови свойства или да прочетем свойствата
Можем да използваме функцията, за да съхраняваме собственост и да я извличаме по-късно,
function bestPsychedelicRockBandInBd() { return 'Sonar Bangla Circus'; }
bestPsychedelicRockBand.foo = 'bar';
console.log(bestPsychedelicRockBand.foo); // bar
Тук задаваме свойство foo
на функцията bestPsychedelicRockBand
и по-късно го отпечатваме в конзолата.
Можем да предадем функция на друга функция заедно с нейните свойства и данни
Нека да предадем функция на друга функция и да извършим изпълнението,
function nemesis(whoIsVocal) { console.log(whoIsVocal()); // `whoIsVocal` function comes as parameter }
// We will pass this function to `nemesis` function as parameter function showVocalName() { console.log('Zohad'); }
nemesis(showVocalName);
Можем да върнем функция заедно с нейните свойства и данни
Сега като обект, ще върнем функция от друга функция,
function anotherRockBand() { // We are returning function named `aurthohin` return function aurthohin() { console.log('This is Aurthohin'); } }
const returnedFunction = anotherRockBand();
returnedFunction();
Тази функция засилва функцията JavaScript closure
.
Той принадлежи към веригата прототипи на JavaScript
Знаем, че основният обект Object
има свойство, наречено prototype
,
console.log(Object.hasOwnProperty('prototype')); // true
Ако създадем функция, можем да видим, че функцията също има свойството prototype
,
function crypticFate() {}
console.log(crypticFate.hasOwnProperty('prototype')); // true
Можем да извикаме функция с помощта на call
, bind
и apply
. Интересното е, че те не са собствено свойство на функцията, можем да проверим това,
function crypticFate() {}
console.log(crypticFate.hasOwnProperty('call')); // false console.log(crypticFate.hasOwnProperty('bind')); // false console.log(crypticFate.hasOwnProperty('apply')); // false
Всъщност тези свойства са наследени от веригата на прототипа и естествени за основния обект. За да проверите,
function crypticFate() {}
console.log(crypticFate.__proto__.hasOwnProperty('call')); // true console.log(crypticFate.__proto__.hasOwnProperty('bind')); // true console.log(crypticFate.__proto__.hasOwnProperty('apply')); // true
Последни мисли
Както виждаме тези 5 точки, споменати по-горе, функциите са просто обекти в света на JavaScript. Кажете ми вашите мисли по този въпрос.
Повече съдържание в PlainEnglish.io. Регистрирайте се за нашия безплатен седмичен бюлетин. Следвайте ни в Twitter, LinkedIn, YouTube и Discord . Интересувате ли се от Growth Hacking? Вижте Circuit.