Објектно оријентисани ЈаваСцрипт (ООЈС) 3 начина за креирање објеката инстанце
Када је програмски језик све о објектима, прва ствар коју треба да научимо је како створити објекте. Креирање објеката у ЈаваСцрипту је прилично једноставно: пар коврчавих заграда ће обавити посао, то јест ни једини начин за креирање објекта нити једини начин икада ћете морати да користите.
У ЈаваСцрипт-у, инстанце објекта су креирана из уграђених објеката и настају када програм ради. На пример, Датум
је уграђени објект који нам даје информације о датумима. Ако желимо да прикажемо тренутни датум на страници, ми Потребна је инстанца извођења Датум
која садржи информације о текућем датуму.
ЈаваСцрипт нам такође омогућава дефинишемо сопствене објекте који могу произвести властите инстанце објекта у рунтиме. Ин ЈаваСцрипт, све је објекат и сваки објекат има ултимате анцестор зове Објецт
. Креира се инстанца објекта инстанцирање.
1. Тхе нев
оператор
Један од најчешћих и најпознатијих метода за креирање нове инстанце објекта је помоћу нев
оператор.
Вам је потребна конструктор да направим нев
оператор оператор. Конструктор је метода објекта која спаја а нова инстанца тог објекта. Његова основна синтакса изгледа овако:
нови конструктор ()
Конструктор може прихватити аргументе које се могу користити за промјену или додавање својстава објектној инстанци коју конструира. Конструктор има исто име као објекат коме припада.
Ево примера како да направите инстанца Датум ()
објекат са нев
кључна реч:
дт = нев Датум (2017, 0, 1) цонсоле.лог (дт) // Сун Јан 01 2017 00:00:00 ГМТ + 0100
Датум ()
је конструктор за креирање новог Датум
објекат. Различити конструктори за објекат узети различите аргументе да креирате исту врсту објеката са објектима различити атрибути.
Нису сви уграђени објекти у ЈаваСцрипту слични Датум
. Постоје објекти који не долазите са конструктором: Матх
, ЈСОН
и Одразити
, али они су још увек обични објекти.
Међу уграђеним објектима који имају конструкторе, Симбол
не може се позвати у стилу конструктора да инстанцирате ново Симбол
пример. Може бити само позвани као функција која враћа ново Симбол
вредност.
Такође, међу уграђеним објектима који имају конструкторе, не морају сви њихови конструктори бити позвани са нев
да би се инсталирао. Фунцтион
, Арраи
, Грешка
, и РегЕкп
могу се такође позивати као функције, без коришћења нев
кључне речи, и они ће инстанцирати и вратити нову инстанцу објекта.
2. Тхе Одразити
објекат
Могуће је да су програмери са позадином већ упознати АПИ за рефлексију. Рефлексија је карактеристика програмских језика прегледати и ажурирати неке од основних ентитета, као што су објекти и класе, ат рунтиме.
У ЈаваСцрипту сте већ могли да изведете неки операције рефлексије Објецт
. Али, а одговарајући АПИ за рефлексију на крају је постојао иу ЈаваСцрипт-у.
Тхе Одразити
објекат има скуп метода за креирајте и ажурирајте инстанце објекта. Тхе Одразити
објекат нема конструктора, тако да не може да се инсталира са нев
оператор, и, баш као Матх
и ЈСОН
, то не може се позвати као функција било.
Међутим, Одразити
хас а еквивалент нев
оператор: тхе Рефлецт.цонструцт ()
метода.
Рефлецт.цонструцт (таргет, аргументсЛист [, невТаргет])
Оба таргет
и опционално невТаргет
аргументи објекти који имају сопствене конструкторе, док аргументиЛист
је листу аргумената да се проследи конструктору таргет
.
вар дт = Рефлецт.цонструцт (Дате, [2017, 0, 1]); цонсоле.лог (дт); // Сун Јан 01 2017 00:00:00 ГМТ + 0100
Код изнад има исти ефекат као инстанцирање Датум ()
помоћу нев
оператор. Иако још увек можете да користите нев
, Рефлексија је ЕЦМАСцрипт 6 стандард. Такође вам омогућава искористите невТаргет
расправа, што је још једна предност у односу на нев
оператор.
Вредност невТаргет
прототип (тачније, то је прототип. \ т невТаргет
конструктор корисника постаје прототип новостворене инстанце.
Прототип је својство објекта, чија је вредност и објекат, носи својства изворног објекта. Укратко, објект добија своје чланове из прототипа.
Ево, да видимо пример:
класа конструктор () тхис.мессаге = фунцтион () цонсоле.лог ('порука из А') класа Б конструктор () порука () цонсоле.лог ('порука из Б') дата () цонсоле.лог ('дата фром Б') обј = Рефлецт.цонструцт (А, [], Б) цонсоле.лог (обј.мессаге ()); // порука из А цонсоле.лог (обј.дата ()); // подаци из Б цонсоле.лог (обј инстанцеоф Б) // труе
Доношењем Б
као трећи аргумент Рефлецт.цонструцт ()
, прототипну вредност обј
објекат је исто као прототип Б
конструктор (који има својства поруку
и података
).
Тако, обј
може приступити поруку
и података
, доступан у свом прототипу. Али како обј
користи се А
, она такође има своју поруку
то примио од А
.
Иако обј
је конструисан као низ, то јест не инстанца Арраи
, јер је његов прототип постављен на Објецт
.
обј = Рефлецт.цонструцт (Арраи, [1,2,3], Објецт) цонсоле.лог (обј) // Арраи [1, 2, 3] цонсоле.лог (обј инстанцеоф Арраи) // фалсе
Рефлецт.цонструцт ()
може бити корисно када желите да креирате објекат користећи више од једног нацрта.
3. Тхе Објецт.цреате ()
метода
Такође можете да креирате а нови обични објект са специфичним прототипом виа Објецт.цреате ()
. И то би могло изгледати веома слично употреби нев
оператер, али није.
Објецт.цреате (О [, пропертиесОбјецт])
Тхе О
аргумент је објект који служи прототипу за нови објекат који ће бити креиран. Опционално пропертиесОбјецт
аргумент је а лист оф пропертиес можда желите додати новом објекту.
класа конструцтор () мессаге () цонсоле.лог ('порука из А') вар обј = Објецт.цреате (ново А (), дата: вритабле: труе, цонфигурабле: труе, валуе: фунцтион () ретурн 'дата фром обј') цонсоле.лог (обј.мессаге ()) // сообсение от А цонсоле.лог (обј.дата ()) // дата из обј обј1 = Објецт.цреате ( нев А (), фоо: вритабле: труе, цонфигурабле: труе, валуе: фунцтион () ретурн 'фоо фром обј1') цонсоле.лог (обј1.мессаге ()) // с помосьу А цонсоле. лог (обј1.фоо ()) // фоо фром обј1
Ин тхе обј
објект, додано својство података
, док у обј1
, његово фоо
. Дакле, као што видите, можемо имати својства и методе додане новом објекту.
Ово је сјајно када желите да креирате више објеката исте врсте Али са различита допунска својства или методе. Тхе Објецт.цреате ()
Синтакса штеди невоље кодирања свих њих засебно.