ЈаваСцрипт проки објекат вам омогућава да пресретнете и прилагодите понашање другог објекта, без модификације оригинала.
Користећи прокси објекте, можете потврдити податке, обезбедити додатну функционалност и контролисати приступ својствима и функцијама.
Сазнајте све о употреби прокси објеката и како их можете креирати у ЈаваСцрипт-у.
Креирање проки објекта
У ЈаваСцрипт-у можете креирати проки објекте користећи Заступникконструктор. Овај конструктор узима два аргумента: а циљ објекат за омотавање проксија и а руковалац објекат чија својства дефинишу понашање проксија када извршавате операције.
Узима ове аргументе и креира објекат који можете користити уместо циљног објекта. Овај креирани објекат може редефинисати основне операције као што су добијање, подешавање и дефинисање својстава. Такође можете да користите ове прокси објекте за евидентирање приступа својствима и валидацију, форматирање или дезинфекцију уноса.
На пример:
конст оригиналОбјецт = {
фоо: "бар"
}конст руковалац = {
добити: функција(циљ, својство){
повратак циљ [особина];
},
комплет: функција(циљ, својство, вредност){
циљ[особина] = вредност;
}
};
конст проки = НоваЗаступник(оригинални објекат, руковалац)
Овај код креира циљни објекат, оригиналОбјецт, са једним својством, фоои објекат руковања, руковалац. Објекат руковаоца садржи два својства, добити и комплет. Ова својства су позната као замке.
Замка прокси објекта је функција која се позива кад год извршите одређену радњу на прокси објекту. Замке вам омогућавају да пресретнете и прилагодите понашање прокси објекта. Приступ својству из проки објекта позива тхе добити трап, и модификовање или манипулисање својством из проки објекта позива тхе комплет трап.
Коначно, код креира прокси објекат са Заступник конструктор. Пролази оригиналОбјецт и руковалац као циљни објекат и руковалац, респективно.
Коришћење прокси објеката
Прокси објекти имају неколико употреба у ЈаваСцрипт-у, од којих су неке следеће.
Додавање функционалности објекту
Можете да користите прокси објекат да омотате постојећи објекат и додате нову функционалност, као што је евидентирање или Грешка руковање, без измене оригиналног објекта.
Да бисте додали нову функционалност, мораћете да користите Заступник конструктора и дефинишите једну или више замки за радње које желите да пресретнете.
На пример:
конст усерОбјецт = {
име: "Кенеди",
презиме: "Мартинс",
године: 20,
};конст руковалац = {
добити: функција(циљ, својство){
конзола.Пријава(`Добијање имовине"${проперти}"`);
повратак циљ [особина];
},
комплет: функција(циљ, својство, вредност){
конзола.Пријава(`Подешавање својства"${проперти}" на вредност "${валуе}"`);
циљ[особина] = вредност;
},
};конст проки = НоваЗаступник(усерОбјецт, руковалац);
конзола.лог (проки.фирстНаме); // Добијање својства "фирстНаме" Кеннеди
конзола.лог (проки.ластНаме); // Добијање својства "ластНаме" Мартинс
проки.аге = 23; // Подешавање својства "старост" на вредност "23"
Овај блок кода додаје функционалност преко прокси замки, добити и комплет. Сада, када покушате да приступите или измените својство усерОбјецт, проки објекат ће прво пријавити вашу операцију на конзолу пре него што приступи или измени својство.
Валидација података пре него што их поставите на објекат
Можете да користите прокси објекте да бисте потврдили податке и осигурали да испуњавају одређене критеријуме пре него што их поставите на објекат. То можете учинити тако што ћете дефинисати логику валидације у а комплет замка у руковалац објекат.
На пример:
конст усерОбјецт = {
име: "Кенеди",
презиме: "Мартинс",
године: 20,
};конст руковалац = {
добити: функција(циљ, својство){
конзола.Пријава(`Добијање имовине"${проперти}"`);
повратак циљ [особина];
},
комплет: функција(циљ, својство, вредност){
ако (
имовина "старост" &&
тип вредност == "број" &&
вредност > 0 &&
вредност < 120
) {
конзола.Пријава(`Подешавање својства"${проперти}" на вредност "${валуе}"`);
циљ[особина] = вредност;
} друго {
бацитиНоваГрешка("Неважећи параметар. Молимо прегледајте и исправите.");
}
},
};
конст проки = НоваЗаступник(усерОбјецт, руковалац);
проки.аге = 21;
Овај блок кода додаје правила валидације комплет трап. Можете доделити било коју вредност старости имовине на а усерОбјецт инстанце. Али, са додатним правилима валидације, можете доделити нову вредност својству старости само ако је то број већи од 0 и мањи од 120. Било коју вредност коју покушате да поставите на старости својство које не испуњава тражене критеријуме ће покренути грешку и одштампати поруку о грешци.
Контролисање приступа својствима објекта
Можете користити проки објекте да сакријете одређена својства објекта. Урадите то тако што ћете дефинисати логику ограничења у добити замке за својства којима желите да контролишете приступ.
На пример:
конст усерОбјецт = {
име: "Кенеди",
презиме: "Мартинс",
године: 20,
телефон: 1234567890,
емаил: "фоо@бар.цом",
};конст руковалац = {
добити: функција(циљ, својство){
ако (имовина "телефон" || имовина "е-пошта") {
бацитиНоваГрешка(„Приступ информацијама одбијен“);
} друго {
конзола.Пријава(`Добијање имовине"${проперти}"`);
повратак циљ [особина];
}
},
комплет: функција(циљ, својство, вредност){
конзола.Пријава(`Подешавање својства"${проперти}" на вредност "${валуе}"`);
циљ[особина] = вредност;
},
};конст проки = НоваЗаступник(усерОбјецт, руковалац);
конзола.лог (проки.фирстНаме); // Добијање својства "фирстНаме" Кеннеди
конзола.лог (проки.емаил); // Избацује грешку
Горњи блок кода додаје одређена ограничења за добити трап. У почетку, можете приступити свим доступним својствима на усерОбјецт. Додата правила спречавају приступ осетљивим информацијама као што су е-пошта или телефон корисника. Покушај приступа неком од ових својстава ће покренути грешку.
Друге замке проксија
Тхе добити и комплет замке су најчешће и најкорисније, али постоји 11 других ЈаваСцрипт прокси замки. Су:
- применити: Тхе применити трап се покреће када позовете функцију на прокси објекту.
- конструисати: Тхе конструисати трап се покреће када користите нови оператор да креирате објекат од прокси објекта.
- делетеПроперти: Тхе делетеПроперти замка се покреће када користите избрисати оператор за уклањање својства из прокси објекта.
- има - Тхе има замка се покреће када користите ин оператор да провери да ли својство постоји на прокси објекту.
- овнКеис - Тхе овнКеис замка се покреће када позовете било коју Објецт.гетОвнПропертиНамес или Објецт.гетОвнПропертиСимболс функцију на проки објекту.
- гетОвнПропертиДесцриптор - Тхе гетОвнПропертиДесцриптор замка се покреће када позовете Објецт.гетОвнПропертиДесцриптор функцију на проки објекту.
- дефинеПроперти - Тхе дефинеПроперти замка се покреће када позовете Објецт.дефинеПроперти функцију на проки објекту.
- превентЕктенсионс - Тхе превентЕктенсионс замка се покреће када позовете Објецт.превентЕктенсионс функцију на проки објекту.
- је Ектенсибле - Тхе је Ектенсибле замка се покреће када позовете Објецт.исЕктенсибле функцију на проки објекту.
- гетПрототипеОф - Тхе гетПрототипеОф замка се покреће када позовете Објецт.гетПрототипеОф функцију на проки објекту.
- сетПрототипеОф - Тхе сетПрототипеОф замка се покреће када позовете Објецт.сетПрототипеОф функцију на проки објекту.
Као комплет и добити замке, можете користити ове трап цан да додате нове слојеве функционалности, валидације и контроле свом објекту без модификације оригинала.
Недостаци прокси објеката
Прокси објекти могу бити моћан алат за додавање прилагођене функционалности или валидације објекту. Али они такође имају неке потенцијалне недостатке. Један такав недостатак је потешкоће у отклањању грешака, јер може бити тешко видети шта се дешава иза кулиса.
Прокси објекти такође могу бити тешки за коришћење, посебно ако нисте упознати са њима. Требало би пажљиво да размотрите ове недостатке пре него што употребите проки објекте у свом коду.