Kufanya kazi na vitu katika javascript - Kutumia vitendaji - Nadharia na mazoezi. Uumbaji na uendeshaji wa vitu. Kuunda kitu kipya

Kutembelea rasilimali ya wavuti ni URI maalum ndani upau wa anwani kivinjari. Mgeni anataja anwani ya ukurasa, na imechanganuliwa na kivinjari kuwa vipengele vya mti wa DOM - Hati. Mfano wa Kitu. Kiungo chochote kwenye ukurasa huu huambia kivinjari kuchanganua ukurasa mwingine na kuunda mti mwingine wa vitu.

Kivinjari huruhusu mgeni kurudi nyuma au mbele kupitia msururu wa kurasa ambazo tayari zimetazamwa ndani kikao cha sasa kazi.

Kwa kweli, vitendo vya mtumiaji ni harakati kati ya mifumo ya vitu vilivyoundwa katika mchakato wa kutembelea kurasa. Kila ukurasa ni mti wake wa DOM na, kwa kuongeza, Kitu cha JavaScript"s ni vitu vya syntax ya lugha yenyewe na maelezo ya mtumiaji.

DOM: kupakia, kusasisha na kubadilisha

Kuna chaguzi kuu tatu ambazo huunda vitu vya ukurasa wa rasilimali ya wavuti, katika kiwango cha DOM na lugha ya JavaScript yenyewe, ambayo ilifanya muundo wa uundaji tofauti, na kulingana na maelezo yaliyotolewa na msanidi programu:

  • kupakia - mgeni alikuja kwenye ukurasa wa tovuti;
  • sasisha - mgeni (kifungo cha kivinjari au Ctrl-F5);
  • kubadilisha kipengele cha ukurasa, kwa mfano (AJAX, script, tukio, ...).

Taratibu zote tatu kimsingi ni tofauti, lakini kutofautisha sifa za mbili za kwanza ni muhimu sana. Ni vigumu kumzuia mgeni kuonyesha upya ukurasa - hii ni tabia ya mgeni "mbaya" ambayo msanidi anapaswa kukumbuka.

Urambazaji kwenye ukurasa na zaidi unapaswa kulala tu katika utendaji wa ukurasa yenyewe, na sio katika historia ya kivinjari na kazi za vifungo vyake. Tovuti nyingi hutangaza hitaji hili muhimu, lakini wageni hukiuka jadi.

Kubadilisha ukurasa bila kuipakia upya katika kiwango cha kipengele chake binafsi (kwa mfano, AJAX) ni suluhisho la kawaida kwa kurasa zinazobadilika. Kama sheria, hii hutumiwa kupitia vipengee vya ukurasa, kubadilisha vitu vyake, na kudhibiti mazungumzo na mgeni.

Vitu vya Msingi vya JavaScript

JavaScript inategemea kitu. Takriban vijisehemu vyote vya lugha ni vitu. Msanidi programu anaweza kuunda maelezo mwenyewe vitu kwa kutumia chaguzi anuwai za sintaksia.

Kitu chochote ambacho si "kamba", "nambari", kweli, uongo, null au isiyofafanuliwa ni kitu. Ndani ya mfumo wa sintaksia ya lugha, hii inaweza kupuuzwa, kuelewa na vitu pekee Vipengele vya DOM na maelezo yako mwenyewe ya Kitu cha JavaScript Muundo wa kimsingi wa lugha katika hali nyingi hauna umuhimu wa kiutendaji kwa msanidi.

Kwa mfano, kazi za hisabati zinawakilishwa na kitu cha Hisabati. Hii ni rahisi ndani ya mfumo wa dhana ya lugha, lakini kwa msanidi programu ni syntax rahisi ya kutumia safu muhimu ya shughuli za hisabati.

Ni muhimu kufanya kazi kwa usahihi na DOM na kuelezea kwa usahihi vitu vyako mwenyewe. Syntax ya JavaScript kazi ya kitu na misemo kwa matumizi yao ni aina ya kurekodi mantiki ya algorithm inayohitajika.

Kamba, Safu na Vitu

Vipengee vyote vya JavaScript vinatokana na kanuni: "property" = "value" na dhana ya safu shirikishi. Katika sana kesi rahisi Kitu cha JavaScript ni mkusanyiko wa mali = jozi za thamani. Walakini, "thamani" haiwezi kuwa nambari kila wakati, na mali haiandikwa kila wakati bila nukuu.

Haupaswi kutumia kupita kiasi kutaja mali. Kwa kweli, majina ya sifa yana herufi za Kilatini pekee, yanakidhi mahitaji ya kutaja vigeu, na si maneno muhimu (pamoja na yaliyohifadhiwa) ya lugha.

Hakuna mpangilio wa mali unatarajiwa, lakini wakati wa kuunda au kuanzisha safu ya ushirika, inakubalika kabisa kujua jinsi mambo yake yamepangwa. Haipendekezi kutumia hali hii, lakini inawezekana kuiweka katika akili.

Kuanzisha safu ya mali inamaanisha wakati huo huo:

  • kuunda safu;
  • uundaji wa kitu.

Katika muktadha maalum wa matumizi, unaweza kuzingatia kitu cha JavaScript - kama safu ya ushirika, na mahali pengine kwenye algoriti - kama kitu, kikabidhi. mbinu muhimu, kubadilisha maadili ya vipengele vyake.

Kwa sababu majina ya vipengee na thamani zao lazima zibainishwe katika umbizo la mfuatano unapoundwa au kurekebishwa, inashauriwa kutumia nukuu za mfuatano na alama za nukuu.

Kufikia Sifa za Kitu

Unaweza kupata na kubadilisha thamani za sifa za kitu kwa kutumia Object.keys ujenzi: JavaScript hutengeneza safu ya sifa zote za kitu. Wakati vitu vinapoundwa kwa nguvu, ujenzi huu ni rahisi sana, kwani huzalisha moja kwa moja orodha ya mali zote zilizopo kwenye kitu.

KATIKA katika mfano huu Safu mbili zimeelezewa tofauti. Katika maombi, safu zote mbili ni sawa, kwani zina mali ya jina moja na maadili yao. Kitanzi hurudia kupitia sifa zote za safu ya pili na hutoa mfuatano wa maadili yote.

Athari sawa inaweza kupatikana katika nukuu ya nukta au mabano:

  • x1_Obj.NameLast;
  • x1_Obj ["NameFirst" ].

Miundo yote miwili ni halali na hutoa matokeo yaliyohitajika. Katika mfano hapo juu, wakati wa kubainisha safu kwa njia ya braces curly "()", hitilafu inaweza kufanywa kwa namna ya "," ishara mwishoni mwa hesabu (iliyowekwa alama katika mfano na mduara nyekundu). Vivinjari kawaida hupuuza herufi ya ziada katika hesabu, lakini ni bora kutofanya hivi.

Kuondoa sifa za kitu

Kwa sababu kitu ni safu shirikishi, utendakazi wa kipengee cha JavaScript wa kufuta unafanywa katika kiwango cha kifaa cha sasa (wakati wa kurithi - hii ni muhimu) na inazingatiwa kwenye mkusanyiko wa sifa za kitu hicho.

Katika muktadha wa mfano hapo juu, unaweza kutumia miundo ifuatayo:

  • futa x1_Obj .NameLast ;
  • futa x2_Obj ["NameFirst" ];

Ujenzi wa kwanza huondoa kipengele cha pili cha kitu cha kwanza, ujenzi wa pili huondoa kipengele cha kwanza cha kitu cha pili. Opereta ya kufuta haifanyi kazi kwenye sifa za mfano na hurejesha sivyo ikiwa sifa haiwezi kufutwa.

Mali na mbinu za vitu

Sintaksia ya sifa na utendaji wa kitu cha JavaScript (mbinu) ni sawa na kanuni za jumla za sintaksia na semantiki za lugha. Kwa kweli, kinyume chake ni kweli.

Sifa na mbinu za kitu ni lahaja ya kuelezea maelezo na vitendo vinavyoruhusiwa kupitia dhana ya JavaScript inayolengwa na kitu.

Mfano huu unaelezea kitu cha x3_Obj ambacho kina sifa mbili tu: kipengee na pos. Kisha njia ya hello() iliongezwa kama kazi. Kama matokeo, maadili ya kitu cha JavaScript yatatafsiri maelezo haya katika muktadha wa thamani za mali kama inavyoonyeshwa kwenye dirisha la matokeo, ambayo ni, itaweka chombo cha kukokotoa (1) kama thamani.

Wakati wa kupiga simu Hello() mali moja kwa moja, inatafsiriwa kama njia (kazi) na matokeo (2) ni utekelezaji wa nambari ya njia hii.

Neno kuu hili katika kitu

Ili kuabiri nafasi ya kipengele cha kitu, msanidi programu anaweza kutumia nenomsingi hili na kurejelea kwa sifa zinazoelezea ili kupata au kubadilisha thamani zake.

Huu ni mwanzo tu wa kuelezea kitu kilicho na mwili wa mjenzi tu. Mfano huu unaelezea kitu cha kufanya kazi na vidakuzi. Kitu kinaanzishwa wakati ukurasa unapakiwa na ujenzi:

  • var oCookie = new scookies(cOwnerCode);
  • oCookie.Init();

Katika mfano huu, cOwnerCode ni msimbo wa kipekee wa mgeni. Ikiwa haipo, basi oCookie itaundwa katika kijenzi cha kitu kanuni mpya. Haijalishi msanidi alimaanisha nini kwa idhini ya mgeni ya kitu hiki, ni muhimu jinsi neno hili kuu linatumiwa hapa kuelezea njia za kitu na kuziita kutoka kwa njia zingine za kitu:

  • hii .GetCookie = kazi (cName) ( ... );
  • hii .SetCookie = kazi (cName, cValue) ( ... ).

Hii inaelezea mbinu za kitu cha kusoma kidakuzi kwa jina lake na kuandika thamani ya kuki yenye jina maalum.

  • hii .GetCookie("Mmiliki");
  • hii .SetCookie ( "Mmiliki" , Mmiliki );

Hii ndio jinsi hutumiwa, ikiwa kutokana na ujenzi wa kwanza thamani haijawakilishwa, basi ujenzi wa pili huiweka.

Mfano wa kitu cha kufanya kazi na vidakuzi

Unaweza kujadili Object na dhana ya mbinu inayolengwa na kitu ya lugha inayoendeshwa katika mazingira ya kivinjari. Hii inavutia, lakini kwa kweli inahitaji mazoezi, na sio nadharia kupitia mifumo ya kitu ni hatua kali JavaScript.

Katika mazoezi yenye mwelekeo wa kitu, kitu kingine ni muhimu. Kufanya kazi na vidakuzi kwenye takriban rasilimali zote za wavuti ni sawa kwa kozi. Utekelezaji huu katika umbizo la kitu ni wazo nzuri. Katika muktadha huu, uanzishaji wa kitu hutokea wakati ukurasa unafunguliwa: ukurasa umewekwa = kitu cha kuki kipo na kila kitu kimesomwa, na kile ambacho hakikuwepo kinaundwa.

Wakati wa kufanya kazi na ukurasa, mgeni hufanya vitendo fulani na kivinjari lazima kibadilishe au kuunda vidakuzi. Kuna njia mbili za kitu (zilizoandikwa hapo juu) ambazo hufanya hivi.

Kwa kweli, kitu cha kuki kinaonekana mara baada ya kivinjari kujenga DOM na kukamilisha mfumo wa kitu JavaScript mpya utendaji: soma na uunda (badilisha) vidakuzi.

Juu ya hili mfano rahisi inachukuliwa kama utaratibu wa kuunda vitu halisi ambavyo vina mali zao wenyewe na utendaji (mbinu). Kila kitu hufanya kazi yake mwenyewe na haishiriki katika algorithm ya jumla, haibadilishi data ya vitu vingine au nafasi ya pamoja majina

Kwa mbinu hii, msanidi huhakikisha kuundwa kwa mfumo wa vitu vya kipekee vya kutosha kuelezea na kuhudumia tatizo linalotatuliwa.

Matukio ya ukurasa na kitu

Kipengele muhimu cha utendakazi wa DOM na JavaScript: object event "s - ambayo hukuruhusu kupata taarifa kuhusu tukio kwenye kidhibiti chake. Takriban kila kipengele cha ukurasa kinaweza kugawiwa kidhibiti chake kwa tukio moja au zaidi.

Kwa kweli, msanidi wa JavaScript huunda "kipande" kimoja kikubwa cha msimbo, lakini maelezo mengi ya kazi, vitu, miundo ya data na huwapa vidhibiti tukio kwa vipengele maalum vya ukurasa.

Tukio la kitu ni taarifa kuhusu tukio lililosababisha kidhibiti na uwezo wa kidhibiti hiki kutekeleza jibu la kutosha kwa tukio hili. Kila tukio hutofautiana tu kwa jina lake na mahali pa tukio, lakini pia katika vigezo vingine vingi.

Hasa, matukio ya kibodi ni seti moja ya vigezo, matukio ya panya ni aina tofauti kabisa ya data, na majibu ya seva kupitia AJAX imepangwa kabisa na msanidi mwenyewe.

Katika kila kisa mahususi, picha ya matukio ambayo yanaweza kutokea kwenye ukurasa hubadilishwa kuwa anuwai ya vidhibiti vilivyowezeshwa nje ya chaguo zilizotolewa kwa ajili ya kuchakata seti maalum ya matukio, ukurasa hauchukui hatua yoyote.

Uumbaji na uendeshaji wa vitu

Kivinjari "hubadilisha" URI, anwani ya rasilimali ya wavuti iliyoainishwa na mgeni, kuwa mti wa DOM - mfumo wa vitu vya ukurasa wa rasilimali hii ya wavuti. Wakati mgeni anafuata viungo kwenye ukurasa, kivinjari huenda kwenye miti inayofanana ya kurasa zingine.

Hali hii inamruhusu msanidi programu kuunda mfumo wake wa vitu kama msingi wa rasilimali ya wavuti ambayo inajibu vya kutosha kwa tabia ya wageni. Ikiwa utatenga utendaji wa jumla, kwa mfano:

  • kufanya kazi na vidakuzi;
  • kupokea/kusambaza data (AJAX);
  • vidokezo vya zana;
  • ujumbe wa ndani (soga ya tovuti);
  • kazi zingine;

basi, mara baada ya kuundwa, mifumo ya kitu inaweza kutumika wakati wa kuendeleza tovuti nyingine. Hii ni faida kubwa ya mbinu ya kifaa juu ya matumizi ya kawaida ya JavaScript kama lugha ya kivinjari ambayo inahakikisha utendakazi wa ukurasa na majibu kwa matukio.

Vitu ni vijenzi kamili vinavyoweza kuumbizwa kama faili tofauti na kutumia katika siku zijazo. Kipengele cha tabia njia hii ni fursa maoni, wakati kitu kilichosasishwa, kilichoboreshwa kinaweza kutumika katika maendeleo ya awali, kusasisha kiotomatiki utendaji wake bila kurekebisha tovuti.

Sasisho la mwisho: 04/08/2018

Upangaji programu unaolenga kitu ni mojawapo ya dhana kuu katika ukuzaji wa programu leo, na katika JavaScript tunaweza pia kuchukua faida kamili ya OOP. Wakati huo huo, kuhusiana na JavaScript, programu inayolenga kitu ina baadhi ya vipengele.

Vitu

Katika mada zilizopita, tulifanya kazi na data ya zamani - nambari, mifuatano, lakini data haiwakilishi aina za zamani kila wakati. Kwa mfano, ikiwa katika programu yetu tunahitaji kuelezea kiini cha mtu ambaye ana jina, umri, jinsia, na kadhalika, basi kwa kawaida hatutaweza kuwakilisha kiini cha mtu kama nambari au kamba. Tutahitaji mistari michache au nambari ili kumwelezea mtu vizuri. Katika suala hili, mtu atafanya kama muundo tata, ambao utakuwa na mali ya mtu binafsi - umri, urefu, jina la kwanza, jina la mwisho, nk.

Kufanya kazi na miundo kama hii, JavaScript hutumia . Kila kitu kinaweza kuhifadhi mali zinazoelezea hali yake na njia zinazoelezea tabia yake

Kuunda kitu kipya

Kuna njia kadhaa za kuunda kitu kipya.

Njia ya kwanza ni kutumia mjenzi wa Kitu:

Var user = new Object();

KATIKA kwa kesi hii kitu kinaitwa user . Inafafanuliwa kwa njia sawa na tofauti yoyote ya kawaida kwa kutumia neno kuu la var.

Neno jipya la Object() linawakilisha mwito kwa mjenzi, chaguo la kukokotoa ambalo huunda kitu kipya. Opereta mpya hutumiwa kumwita mjenzi. Kumwita mjenzi kimsingi ni kama kuita kazi ya kawaida.

Njia ya pili ya kuunda kitu ni kwa kutumia brashi za curly:

Var mtumiaji = ();

Leo, njia ya pili ni ya kawaida zaidi.

Mali ya kitu

Baada ya kuunda kitu, tunaweza kufafanua mali juu yake. Ili kufafanua mali, unahitaji kutaja jina la mali baada ya jina la kitu, kilichotenganishwa na dot, na kukipa thamani:

Var mtumiaji = (); user.name = "Tom"; mtumiaji.umri = 26;

Katika kesi hii, jina la mali mbili na umri hutangazwa na kupewa maadili yanayolingana. Baada ya hayo, tunaweza kutumia mali hizi, kwa mfano, kuonyesha maadili yao kwenye koni:

Console.log(jina la mtumiaji); console.log(user.age);

Unaweza pia kufafanua mali wakati wa kufafanua kitu:

Var user = ( jina: "Tom", umri: 26 );

Katika kesi hii, mhusika wa koloni hutumiwa kugawa thamani kwa mali, na koma (badala ya semicolon) huwekwa baada ya ufafanuzi wa mali.

Kwa kuongeza, kuna njia ya mkato ya kufafanua mali:

Var name = "Tom"; var umri = 34; var user = (jina, umri); console.log(jina la mtumiaji); // Tom console.log(user.age); // 34

Katika kesi hii, majina ya vigezo pia ni majina ya mali ya kitu. Na kwa njia hii unaweza kuunda miundo ngumu zaidi:

Var name = "Tom"; var umri = 34; var user = (jina, umri); var mwalimu = (mtumiaji, kozi: "JavaScript"); console.log(mwalimu.user); // (jina: "Tom", umri: 34) console.log(teacher.course); // JavaScript

Mbinu za Kitu

Mbinu za kitu hufafanua tabia yake, au vitendo vinavyofanya. Mbinu ni kazi. Kwa mfano, hebu tufafanue njia ambayo ingeonyesha jina na umri wa mtu:

Var mtumiaji = (); user.name = "Tom"; mtumiaji.umri = 26; user.display = function())( console.log(user.name); console.log(user.age); ); // mbinu piga user.display();

Kama ilivyo kwa kazi, njia hufafanuliwa kwanza na kisha kuitwa.

Mbinu pia zinaweza kufafanuliwa moja kwa moja wakati wa kufafanua kitu:

Var user = ( jina: "Tom", umri: 26, display: function())( console.log(this.name); console.log(this.age); ) );

Kama ilivyo kwa mali, njia imepewa rejeleo la kazi kwa kutumia koloni.

Ili kufikia sifa au mbinu za kitu ndani ya kitu hicho, tumia neno kuu hili. Inamaanisha marejeleo ya kitu cha sasa.

Unaweza pia kutumia njia fupi ya kufafanua njia kwa kuacha koloni na kazi:

Var user = ( jina: "Tom", umri: 26, display())( console.log(this.name, this.age); ), move(place)( console.log(this.name, "huenda kwa ", mahali); user.display(); // Tom 26 user.move("duka"); //Tom huenda dukani

Sintaksia ya safu

Pia kuna njia mbadala ya kufafanua mali na njia kwa kutumia syntax ya safu:

Var mtumiaji = (); user["name"] = "Tom"; mtumiaji["umri"] = 26; user["display"] = function())( console.log(user.name); console.log(user.age); ); // kumwita mtumiaji wa mbinu["display"]();

Jina la kila mali au mbinu imefungwa katika alama za nukuu na mabano ya mraba, kisha hupewa thamani. Kwa mfano, mtumiaji["age"] = 26 .

Unapofikia sifa na mbinu hizi, unaweza kutumia nukuu za nukta (user.name) au utumie: user["name"]

Kamba kama Sifa na Mbinu

Inapaswa pia kuzingatiwa kuwa majina ya mali ya kitu na mbinu daima ni masharti. Hiyo ni, tunaweza kuandika tena ufafanuzi uliopita wa kitu kama hiki:

Var user = ( "jina": "Tom", "umri": 26, "display": function())( console.log(user.name); console.log(user.age); ) ); // kuita njia user.display();

Kwa upande mmoja, hakuna tofauti kati ya fasili hizo mbili. Kwa upande mwingine, kuna matukio ambapo kuifunga kichwa kwenye mstari kunaweza kusaidia. Kwa mfano, ikiwa jina la sifa lina maneno mawili yaliyotenganishwa na nafasi:

Var user = ( jina: "Tom", umri: 26, "full name": "Tom Johns", "display info": function())( console.log(user.name); console.log(user.age) ;); console.log(mtumiaji["jina kamili"]); mtumiaji["maelezo ya kuonyesha"]();

Tu katika kesi hii, kufikia mali na mbinu hizo, lazima tutumie syntax ya safu.

Kuondoa mali

Hapo juu tuliangalia jinsi tunaweza kuongeza sifa mpya kwa kitu. Hata hivyo, tunaweza pia kufuta mali na mbinu kwa kutumia operator kufuta. Na kama vile kuongeza, tunaweza kuondoa mali kwa njia mbili. Njia ya kwanza ni kutumia nukuu za nukta:

Futa kitu.mali

Au tumia syntax ya safu:

Futa kitu["mali"]

Kwa mfano, wacha tuondoe mali:

Var mtumiaji = (); user.name = "Tom"; mtumiaji.umri = 26; user.display = function())( console.log(user.name); console.log(user.age); ); console.log(jina la mtumiaji); // Tom futa jina la mtumiaji; // futa mali // mbadala // futa mtumiaji["jina"]; console.log(jina la mtumiaji); // haijafafanuliwa

Baada ya kufutwa, mali itakuwa haijafafanuliwa, hivyo unapojaribu kuipata, programu itarudi thamani isiyojulikana.

Salamu kwa kila mtu anayesoma uchapishaji huu. Leo nataka kukutembeza kupitia zana muhimu ya lugha - vitu vya JavaScript. Acha nikukumbushe kwamba js ni kivinjari na inafanya kazi kwenye mifumo yote ya uendeshaji (windows, mac os, nk). Tofauti na lugha za programu zinazoelekezwa na kitu, utekelezaji wa vitu katika js hutofautiana kwa kiasi kikubwa kutoka kwa utendaji wa kawaida na tofauti katika matumizi ya matukio, kwa mfano, katika C #.

Kwa hiyo, baada ya kusoma makala ya sasa, utajifunza sifa kuu za kutofautisha za vitu vya script, jifunze kwa njia gani zinaweza kuundwa, kusasishwa na kufutwa. Pia nitagusa juu ya mada ya mali, mbinu na wajenzi, na kuzungumza juu amri muhimu na bila shaka kidogo kuhusu urithi. Nadhani ni wakati wa kuanza kujifunza!

Ni kitu gani kwenye JavaScript na ina uwezo gani?

Katika js, vitu ni safu rahisi za ushirika (pia huitwa heshi).

Safu ya ushirika ni nini?

Huu ni muundo wa data ambao huhifadhi kiasi fulani cha maelezo yanayohusiana na kuelezea kipengele maalum. Data zote zimeundwa na kuunganishwa kama "kifunguo => thamani".

Kwa mfano, unahitaji kuelezea magari. Kisha unaunda kitu kiotomatiki na ueleze sifa zake katika safu. Niliamua kuelezea utengenezaji wa gari (jina), rangi yake (rangi) na gharama (bei). Hapo chini nimeambatisha nambari ya kutekeleza kazi iliyoelezewa.

1 2 3 4 5 var avto = ( jina: "BMW 116i", rangi: "nyeusi", bei: 588000);

var avto = ( jina: "BMW 116i", rangi: "nyeusi", bei: 588000);

Hapa unaona njia moja ya kuunda kitu kinachoitwa "avto". Jina, rangi na bei ni funguo zinazoweza kutumika wakati wa kuandika programu.

Nilijitangulia na mfano huu, kwa hiyo sasa hebu tuangalie kila kitu kwa utaratibu.

Unaweza kuunda kitu kwa njia kadhaa:

var auto = (); au var auto = new Object();

Katika visa vyote viwili, kitu tupu kilicho na jina linalojulikana huundwa, lakini chaguo la kwanza hutumiwa mara nyingi zaidi, kwani ni fupi na rahisi kuandika.

Yote kuhusu mali

Sasa unahitaji kujaza kitu tupu na vigezo. Ili kufanya hivyo, unahitaji kuongeza mali, ambayo pia niliita funguo hapo juu. Tena, kuna njia mbili za kutangaza mali.

Ningependa kutambua kuwa JavaScript haina mfumo madhubuti wa kuunda na kuanzisha vigezo kama hivyo. Sifa mpya zinaweza kuonekana kote kwenye msimbo, jinsi zinavyoweza kufutwa na kusasishwa.

Kwa hivyo, unaweza kuunda funguo zote mara moja au kuzitangaza kadri zinavyopatikana. Na hata ikiwa, wakati wa kuandika programu, unarejelea funguo ambazo hazipo, hakutakuwa na kosa. Katika kesi hii, "isiyoelezewa" itarejeshwa.

Njia ya kwanza.

Kuunda na kupata mali kwa kutumia nukta. Ili kutekeleza chaguo hili, unahitaji kuandika jina la kitu, na kisha uongeze jina la ufunguo kwa njia ya dot na kisha upe thamani fulani kupitia ishara sawa:

avto.name = "BMW 116i"

Lakini kwa njia hii utaongeza kipengee kimoja zaidi kwa funguo zilizopo:

Njia hii hutumiwa wakati jina la mali tayari linajulikana na unahitaji kufanya vitendo fulani na maadili.

Njia ya pili.

Sio tofauti na ya kwanza, ikiwa unalinganisha madhumuni yao. Hata hivyo, njia hii ina faida kidogo. Kwa chaguo hili, mabano ya mraba hutumiwa:

avto[“jina”] = “BMW 116i”

Aidha nzuri ni uwezo wa kuunda majina ya mali kwa namna ya kamba yoyote. Kwa mfano,

avto[“jina la gari”] = “BMW 116i”

Kufanya kazi na funguo kupitia mabano ya mraba hutumiwa wakati baadhi ya vigezo vimeingizwa na mtumiaji na kuhifadhiwa katika vigezo au wakati majina ya mali haijulikani mapema. Kwa mfano, mtumiaji anaomba bei ya gari iliyochaguliwa. Kipengele kilichoitwa kimeandikwa kwa kutofautisha, na bei inatumwa kwa kujibu:

var auto = (); avto.name = "BMW_116i"; avto.bei = 588000; var key = "bei"; // bei ya gari iliombwa tahadhari (avto);

Sasa hebu tuendelee kwenye kufuta mali. Kila kitu ni rahisi sana hapa. Ili kufuta, tumia amri ya kufuta. Kwa hivyo, ikiwa unaongeza mistari 2 ifuatayo kwa mfano wa mwisho hapa chini:

futa auto.bei;

tahadhari (otomatiki);

Kisha, wakati wa kupiga simu kwa mara ya pili, sanduku la mazungumzo litaonyesha "isiyofafanuliwa".

Maneno machache kuhusu compactness

Katika hatua ya sasa, nilikuambia jinsi ya kuunda kitu na kuelezea mali zake. Nimeambatanisha na hii kesi za mtihani, hata hivyo, msikivu zaidi wenu, wasomaji wapendwa, mmeona kwamba msimbo wa kwanza wa programu ni tofauti na wengine wote.

Na yote kwa sababu inatumia uwakilishi wa data kompakt. Hii ni njia maarufu sana ya kutangaza funguo kwa sababu ni fupi kuandika na rahisi kuelewa kwa macho.

Wacha tupitie mali zetu

Katika JavaScript, unaweza kurudia haraka kupitia vipengele vilivyoundwa. Utaratibu maalum ulitolewa kwa hili, unaojulikana zaidi kama mzunguko.

Ikiwa unafahamu lugha nyingine za programu, basi unajua kwamba mara nyingi vitanzi huundwa kwa kutumia neno kwa , basi hali ya vipengele vya kuhesabu imeandikwa kwenye mabano.

Katika js inafanana na kuonekana kwake kitanzi cha mbele kutoka kwa lugha ya C #. Angalia muundo wa jumla:

kwa (var obj katika kitu) ( // kufanya utaftaji)

ambapo obj inawajibika kwa jina la funguo zilizoorodheshwa,

kitu - kwa maadili yao.

Na sasa hapa kuna mfano halisi kwako.

1 2 3 4 5 6 7 8 var avto = ( jina: "BMW 116i", rangi: "nyeusi", bei: 588000); kwa (var obj katika kitu) ( tahadhari(obj + ":" + kitu) )

var avto = ( jina: "BMW 116i", rangi: "nyeusi", bei: 588000); kwa (var obj katika kitu) ( tahadhari(obj + ":" + kitu) )

Ni wakati wa kufahamiana na mbinu

Lugha ya uandishi hutoa uundaji wa mbinu. Huu ni utaratibu rahisi kabisa ambao wakati wowote unaweza kuongeza njia au njia kwa kitu chochote ambacho kinapanua uwezo wa iliyoundwa. safu za ushirika. Pia huitwa sifa za kazi.

Js yenyewe ni ya nguvu sana na ya kushangaza kwa kiasi fulani. Hivi ndivyo vipengele vya aina tofauti vinaweza kuundwa. Wakati wa kujifunza lugha hii, hauitaji kukariri miundo ngumu, kwani matamko mengi yanafanana sana.

Kwa hivyo, ili kuunda njia, unahitaji kutangaza kitu, na kisha uanze kuandika amri ambayo ni sawa na kuunda mali. Hata hivyo, baada ya "=" sio tena thamani iliyoandikwa, lakini kazi ya neno kuu (kigeu). Na kisha ndani braces curly vitendo vimeorodheshwa.

Hapa kuna utekelezaji wa utaratibu huu:

var avto =() avto.name = “BMV” avto.year = 1999 avto.drive = kazi(k) ( tahadhari(“Gari limepita”+n+“ km.”)) avto.drive(300) avto. kuendesha (450)

Kama unaweza kuona, mfano huu una mali na njia ambazo simu zao zinafanana mwanzoni.

Je, JS pia ina wajenzi?

Ndiyo bwana! Katika lugha hii, kitu chochote kinachotumia neno kuu la "mpya" huwa kijenzi kiotomatiki. Kwa hiyo, hapo juu uliona tamko la kitu tupu katika fomu: avto = Kitu kipya ();. Huyu ndiye mjenzi.

Kwa uwazi, fikiria mistari hapa chini.

var bob = Kitu kipya ();

bob.name = "Bob Smith";

Walakini, hii sio safu nzima ya uwezekano. Katika js, unaweza kuunda wajenzi wako mwenyewe na kisha uwatumie kutangaza vitu vipya.

Kwa hivyo, nataka "kutengeneza" kijenzi maalum kwa magari yaliyopo tayari. Tafadhali kumbuka kuwa jina lazima liandikwe na herufi kubwa. Hii kipengele cha kutofautisha kazi. Ili kufanya hivyo, ninaandika utekelezaji wa programu ifuatayo:

kazi Auto (jina, bei) (

this.name = jina;

hii.bei = bei;

Sasa, unapounda idadi isiyo na kikomo ya vitu na kutumia kijenzi hiki kwao, wote watakuwa wa darasa moja. Kwa mfano:

var car1 = Avto mpya("BMW", 650000);

var car2 = Avto mpya("Audi", 520000);

Kwa kuongeza hii, unaweza kuunda njia ndani ya mjenzi.

Vipengele vya urithi katika JavaScript

Kwa kawaida, katika lugha nyingi, urithi hutegemea madarasa ambayo yanaweza kurithi kutoka kwa kila mmoja. Kisha unaweza kusikia maneno kama vile "darasa la mababu", "darasa la watoto", nk.

Walakini, katika js kila kitu ni tofauti. Hapa ndipo vitu vinarithiwa.

Urithi wote unategemea marejeleo ya ndani kati ya vitu, ambayo inajulikana kama "mfano". Ikiwa unaongeza ".prototype" kwa njia kwa kutumia dot, na kisha uingize jina la mfano, basi vitu vyote vya njia iliyochaguliwa vitarithiwa kutoka kwa mfano huu.

Hebu tuendelee kwa mfano.

kazi Usafiri (jina) ( this.name = name this.canDrive = true ) var transport = new Transport ("avto") // imeunda utendakazi wa kitu cha usafiri Baiskeli (jina) ( this.name = name ) Baiskeli.prototype = usafiri // bainisha kuwa vitu vyote vipya vya darasa hili vitatumia usafiri bike1 = Baiskeli mpya ("kwa_michezo") bike2= Baiskeli mpya ("for_child") console.log(bike1.name) console.log(bike2.name) console .log (baiskeli1.canDrive)

Nadhani nitaishia hapa. Nimekuambia kuhusu vipengele vya msingi vya lugha ya uandishi. Walakini, hii ni maarifa ya juu juu tu. Ifuatayo tutaingia ndani zaidi. Wakati huo huo, usisahau kujiunga na safu ya waliojiandikisha na ushiriki kiunga cha kifungu na marafiki zako. Bahati njema!

Kwaheri!

Salamu nzuri, Roman Chueshov

Soma: mara 97

Vitu ndio msingi wa JavaScript. Aina nyingi za data zilizojumuishwa zinawakilishwa kama vitu. Ili kuwa msanidi programu wa JavaScript aliyefanikiwa, unahitaji kuwa na ufahamu wazi wa jinsi wanavyofanya kazi. Majengo ya kitu huitwa mashamba au mali zake Kitu cha JavaScript. Hutumika kuelezea kipengele chochote cha kitu. Mali inaweza kuelezea urefu wa orodha, rangi ya anga, au tarehe ya kuzaliwa ya mtu. Kuunda vitu ni mchakato rahisi. Lugha hutoa sintaksia inayojulikana kama neno halisi la kitu, ambalo huonyeshwa kwa viunga vilivyopinda.

Kufikia Mali

Lugha hutoa maingizo mawili ya kupata sifa. Ya kwanza na ya kawaida zaidi inajulikana kama nukuu ya nukta. Katika nukuu ya nukta, rasilimali inaweza kufikiwa kwa kubainisha jina la kifaa mwenyeji, ikifuatiwa na kipindi na jina la sifa. Kwa mfano, kitu.foo kilipopewa thamani ya kwanza, basi thamani yake itakuwa 2 baada ya kutekelezwa. Opereta wa JavaScript vitu.

Sintaksia mbadala ya ufikiaji inajulikana kama nukuu ya mabano. Katika nukuu, jina la kitu linafuatwa na seti ya mabano ya mraba. Ndani yao, jina la mali limeainishwa kama kamba:

object["foo"] = object["foo"] + 1.

Inajieleza zaidi kuliko nukuu ya nukta kwa sababu inaruhusu kigezo kubainisha yote au sehemu ya jina la sifa. Hili linawezekana kwa sababu mkalimani wa kitu cha JavaScript hubadilisha kiotomati usemi huu kuwa mfuatano na kisha kupata sifa inayolingana. Majina ya mali huundwa kwa kuruka kwa kuunganisha yaliyomo kwenye kigezo f na kamba "oo":

object = "bar".

Uwekaji alama kwenye mabano huruhusu majina ya vipengee kuwa na herufi ambazo haziruhusiwi katika nukuu za nukta. Kwa mfano, taarifa ifuatayo ni halali kabisa katika mabano. Walakini, ikiwa mtumiaji atajaribu kuunda jina la sifa sawa katika nukuu ya nukta, atakumbana na hitilafu ya kisintaksia:

object["!@#$% &*()."] = kweli.

Sifa za vipengee vya JavaScript vilivyoorodheshwa vinaweza kufikiwa kwa kuunganisha nukta na/au mabano. Kwa mfano, kitu kifuatacho kina kitu kiota kinachoitwa baz ambacho kina kitu kingine kinachoitwa foo ambacho kina sifa inayoitwa bar iliyo na thamani ya tano:

var object = ( baz: ( foo: ( bar: 5 ) ) ).

Maneno yafuatayo yanafikia kipengee kilichoambatishwa cha upau. Usemi wa kwanza unatumia nukuu ya nukta, huku usemi wa pili unatumia nukuu za mraba. Usemi wa tatu unachanganya maingizo yote mawili kufikia matokeo sawa:

  • object.baz.foo.bar;
  • object["baz"]["foo"]["bar"];
  • object["baz"].foo["bar"].

Semi kama zile zilizoonyeshwa katika mfano uliopita zinaweza kusababisha uharibifu wa utendaji wakati matumizi mabaya na kutoa kitu cha JavaScript kutotumika. Kutathmini kila usemi wa nukta au mabano huchukua muda. Ikiwa mali hiyo hiyo inatumiwa mara nyingi, basi inaeleweka kupata mali hiyo mara moja na kisha kuhifadhi thamani katika kigezo cha ndani kwa matumizi yote ya baadaye.

Kazi kama mbinu

Wakati kipengele cha kukokotoa kinapotumika kama sifa ya kitu, huitwa mbinu. Kama sifa, zimebainishwa katika nukuu halisi ya kitu. Kwa mfano:

var object = ( sum: function(foo, bar) ( return foo + bar; ) ).

Mbinu za kitu cha JavaScript zinaweza kuitwa kwa kutumia alama na mabano. Mfano ufuatao unaita sum() njia kutoka kwa mfano uliopita kwa kutumia maingizo yote mawili:

  • kitu.jumla (1, 2);
  • object["jumla"](1, 2).

Nukuu halisi ya kitu ni muhimu kwa kuunda vitu vipya, lakini haiwezi kuongeza sifa au mbinu kwa zilizopo. Kwa bahati nzuri, kuongeza data mpya ni rahisi kama kuunda taarifa ya kazi. Kitu tupu kinaundwa. Halafu, kwa kutumia waendeshaji wa mgawo, tunaongeza mali mbili, foo, na bar, na njia ya baz:

  • var kitu = ();
  • object.foo = 1;
  • object.bar = null;
  • object.baz = function() ( return "hello from baz()"; ).
Ufungaji wa Programu

Wazo la msingi la upangaji unaolenga kitu ni kugawa programu katika sehemu ndogo na kufanya kila sehemu kuwajibika kwa kusimamia hali yake. Kwa hivyo, ujuzi fulani kuhusu jinsi sehemu ya programu inavyofanya kazi inaweza kuwa ya ndani kwa sehemu hiyo. Mtu anayeshughulikia programu iliyosalia hapaswi kukumbuka au hata kujua kuihusu. Wakati wowote data hii ya ndani inabadilika, msimbo unaoizunguka pekee ndio unahitaji kusasishwa.

Sehemu mbalimbali za programu kama hiyo huwasiliana kupitia violesura, seti chache za vitendakazi au vifungo ambavyo hutoa utendakazi muhimu katika kiwango cha muhtasari zaidi huku kikificha utekelezaji wake mahususi. Sehemu kama hizo za programu zinaundwa kwa kutumia vitu. Interface yao ina seti maalum ya mbinu na mali. Sifa ambazo ni sehemu ya kiolesura huitwa umma. Zingine, ambazo hazipaswi kugusa msimbo wa nje, huitwa faragha.

Lugha nyingi hutoa uwezo wa kutofautisha kati ya mali ya umma na ya kibinafsi na hairuhusu msimbo wa nje kufikia zile za kibinafsi. JavaScript, tena ikichukua mbinu ndogo, haipo bado. Kazi inaendelea kwa sasa ya kuongeza lugha hii. Kwa hivyo, watengenezaji wa programu za JavaScript watatumia wazo hili kwa mafanikio. Kwa kawaida, kiolesura kinachoweza kufikiwa ilivyoelezwa katika nyaraka au maoni. Pia ni kawaida kuweka alama chini (_) mwanzoni mwa majina ya mali ili kuonyesha kuwa mali hizo ni za kibinafsi. Kutenganisha kiolesura kutoka kwa utekelezaji ni wazo nzuri. Hii kawaida huitwa encapsulation.

Mali

Kitu chenye mabano (...) kinaitwa kitu halisi. Unaweza kuweka mali mara moja kwenye mabano kama hayo (...). Kwa mfano, jozi "ufunguo: thamani na kadhalika":

acha mtumiaji = ( // jina la kitu: "John", // kwa ufunguo "jina" thamani ya duka "John" age: 30 // by key "age" store value 30 }.!}

Sifa ina ufunguo (pia hujulikana kama "jina" au "kitambulisho") kabla ya koloni ":" na thamani iliyo upande wake wa kulia. Kitu cha mtumiaji kina sifa mbili. Kitu cha mtumiaji cha JavaScript kilicho na faili mbili zilizotiwa saini zinazoitwa "jina" na "umri". Unaweza kuongeza, kufuta na kusoma faili kutoka kwayo wakati wowote. Thamani za mali hupatikana kwa kutumia nukuu ya nukta. Inaweza kuwa ya aina yoyote. Unaweza kuongeza thamani ya boolean. Ili kuondoa kipengele, tumia kufuta kwenye kesi ya Hitilafu ya kitu cha JavaScript.

Vipengee vyote vya hitilafu za JavaScript ni vizazi vya kitu cha Hitilafu au kitu kilichorithiwa:

  • Kipengee cha Hitilafu ya Sintaksia hurithi kutoka kwa kifaa cha Hitilafu.
  • Hitilafu ya kuchanganua ya JSON aina fulani Hitilafu ya Sintaksia ya kitu.
  • Ili kutafakari kwa kina zaidi jinsi programu hushughulikia hitilafu za JavaScript, angalia kwa karibu Airbrake JavaScript, zana ya kufuatilia makosa kwa arifa za wakati halisi na maarifa ya papo hapo kuhusu kile ambacho kilienda vibaya na msimbo wako wa JavaScript.

    Ujumbe wa hitilafu ambao mtumiaji anaweza kupokea kabla ya kufuta kitu cha JavaScript:

  • Herufi mbaya ya udhibiti katika mfuatano halisi.
  • Tabia mbaya katika mfuatano halisi.
  • Utoaji duni wa Unicode.
  • Tabia mbaya ya kutoroka.
  • Mfuatano ambao haujakamilika.
  • Nambari isiyo ya nambari isiyotarajiwa isiyotarajiwa.
  • Hakuna nambari baada ya nukta ya desimali.
  • Nambari ya sehemu isiyokamilika.
  • Hakuna nambari baada ya kiashiria cha digrii.
  • Hakuna nambari baada ya ishara ya kielelezo.
  • Sehemu ya kielelezo haina nambari.
  • Mwisho usiotarajiwa wa data.
  • Neno kuu lisilotarajiwa.
  • Ishara isiyotarajiwa.
  • Mwisho wa data wakati wa kusoma yaliyomo ya kitu.
  • Jina la mali inayotarajiwa au ")".
  • Sifa za Kihesabu

    Unaweza kutumia mabano ya mraba katika kitu halisi. Hizi huitwa mali za hesabu. Mfano umetolewa hapa chini.

    Maana ya mali iliyohesabiwa ni rahisi: inamaanisha kwamba jina la mali lazima lichukuliwe kutoka kwa matunda. Kwa hivyo ikiwa mgeni anaingia "apple", begi litakuwa (apple: 5). Inaweza kutumika zaidi semi tata katika mabano ya mraba:

    acha matunda = "apple";

    : 5 // bag.appleComputers = 5

    Mabano ya mraba yana nguvu zaidi kuliko nukuu za nukta. Wanaruhusu majina ya mali na vigezo. Lakini pia ni ngumu zaidi kuandika. Kwa hivyo mara nyingi, wakati majina ya mali yanajulikana na rahisi, nukta hutumiwa. Na ikiwa unahitaji kitu ngumu zaidi, kisha ubadilishe kwenye mabano ya mraba.

    Uhifadhi wa neno

    Tofauti haiwezi kuwa na jina sawa na moja ya maneno yaliyohifadhiwa, kama vile "for", "let", "return", nk. Lakini wakati wa kupanga vitu vya JavaScript, hakuna kizuizi kama hicho.


    Kimsingi, jina lolote linaruhusiwa, lakini kuna maalum: "__proto__" hupata matibabu maalum kwa sababu za kihistoria. Kwa mfano, huwezi kuiweka kwa thamani nyingine isipokuwa kitu:

    obj.__proto__ = 5;

    tahadhari(obj.__proto__); // haikufanya kazi kama ilivyokusudiwa

    Kama unaweza kuona kutoka kwa nambari, madhumuni ya 5 ya kwanza hayazingatiwi. Hiki kinaweza kuwa chanzo cha hitilafu na hata udhaifu ikiwa opereta anatarajia kuhifadhi jozi za thamani ya vitufe kiholela kwenye kitu na kumruhusu mgeni kubainisha funguo. Katika kesi hii, mgeni anaweza kuchagua "proto" kama ufunguo na kuongeza JavaScript kwa kitu. Kuna njia ya kufanya vitu kutibiwa na __proto__ kama mali ya kawaida. Pia kuna ramani nyingine ya miundo ya data inayotumia funguo za kiholela.

    Mali Nambari

    Neno "mali kamili" hapa linamaanisha kamba inayoweza kubadilishwa kutoka nambari kamili bila kubadilishwa. Kwa hivyo, kwa mfano, "49" ni jina kamili la mali kwa sababu linapobadilishwa kuwa nambari kamili na kurudishwa tena, bado ni sawa. Lakini "+49" na "1.2" sio hivyo. Kwa upande mwingine, ikiwa funguo sio kamili, basi zimeorodheshwa kwa mpangilio ambao ziliundwa. Mfano hapa chini.


    Ili kurekebisha tatizo na misimbo ya kupiga simu, unaweza "kudanganya" kwa kufanya misimbo lisiwe kamili. Kuongeza "+" (ishara ya pamoja) kabla ya kila msimbo inatosha. Sasa itafanya kazi kama ilivyokusudiwa.

    Tofauti kati ya vitu na primitives ni kwamba huhifadhiwa na kunakiliwa "kwa kumbukumbu". Thamani za awali hupewa na kunakiliwa "kama thamani kamili". Tofauti huhifadhi "anwani katika kumbukumbu" badala ya kitu chenyewe au "rejeleo" kwake. Unaweza kutumia tofauti yoyote kufikia na kubadilisha yaliyomo.


    Mfano hapo juu unaonyesha kuwa kuna kitu kimoja tu na msimamizi wa kuingia ndani yake. Kisha, ikiwa ufunguo tofauti (mtumiaji) unatumiwa baadaye, mtumiaji ataona mabadiliko.

    Waendeshaji usawa == na usawa madhubuti === kwa vitu hufanya kazi kwa njia ile ile. Vitu viwili ni sawa ikiwa tu ni kitu kimoja. Kwa ulinganisho kama obj1 > obj2 au ulinganisho na primitive obj == 5, vitu hubadilishwa kuwa primitives. Kuwa waaminifu, ulinganisho kama huo hauhitajiki sana na kwa kawaida ni matokeo ya hitilafu ya usimbaji.

    Uthibitishaji wa Kitu cha JavaScript

    Vitu vina ufikiaji wa mali yoyote. Walakini, ikiwa haipo kabisa, haitakuwa kosa. Kufikia tu mali ambayo haipo kunarudisha bila kufafanuliwa. Inatoa njia ya kawaida sana ya kujaribu mali na kuilinganisha na isiyofafanuliwa. Chini ni mfano.


    Kutumia "in" kwa mali ambazo huhifadhi bila kufafanuliwa. Kawaida ukaguzi mkali wa kulinganisha "=== haujafafanuliwa" hufanya kazi vizuri. Kula kesi maalum inaposhindwa na "ndani" inafanya kazi kwa usahihi. Huu ndio wakati mali ya kitu iko lakini inabaki bila kufafanuliwa.


    Katika msimbo ulio hapo juu, kipengele cha obj.test kipo kitaalam. Kwa hivyo in operator hufanya kazi kwa usahihi. Hali kama hizi ni nadra sana kwa sababu undefined huwa hawagawiwi. Mara nyingi maadili "isiyojulikana" au "tupu" hutumiwa. Kwa hivyo, mwendeshaji wa ndani ni mgeni katika msimbo.

    "kwa..katika" kitanzi

    Ili kusonga funguo zote kutoka kwa kitu hadi kitu, kuna aina maalum ya kitanzi: kwa..in. Hili ni jambo tofauti kabisa na for(;;) construct.

    Chini ni mfano.


    Tafadhali kumbuka kuwa wajenzi wote wa "kwa" hukuruhusu kutangaza utofauti wa kitanzi ndani ya kitanzi kama kitufe cha kuruhusu. Vinginevyo, unaweza kutumia jina tofauti tofauti, ufunguo, badala yake.

    Kwa mfano, for(let prop in obj) pia inatumika sana.

    Kuna "bracket ya mraba" mbadala ambayo inafanya kazi na kamba yoyote.


    Hoja hapa inahitaji funguo za kitu cha JavaScript ziwe kitambulisho halali cha kutofautisha, kumaanisha kuwa hakuna nafasi au vizuizi vingine. Uangalifu lazima uchukuliwe ili kuhakikisha kuwa mstari ndani ya mabano umenukuliwa kwa usahihi. Mabano ya mraba pia hutoa njia ya kupata jina la mali kutoka kwa matokeo ya usemi wowote, kinyume na kamba halisi kutoka kwa kutofautisha:

    let key = "anapenda ndege";

    // sawa na mtumiaji["anapenda ndege"] = kweli;

    mtumiaji = kweli.

    Hapa kigezo muhimu kinaweza kuhesabiwa wakati wa kukimbia na inategemea ingizo la mtumiaji na kisha kutumika kufikia mali. Hii huwapa watayarishaji programu kubadilika zaidi. Nukuu ya nukta haiwezi kutumika kwa njia sawa, kwani inaweza kurudia juu ya kitu cha JavaScript. Chini ni mfano.


    Const kitu

    Kitu kilichotangazwa cha const kinaweza kurekebishwa. Mfano umetolewa hapa chini.


    Inaweza kuonekana kama kitu cha JavaScript kwenye mstari (*) kinaweza kutupa makosa, lakini haifanyi hivyo. Hii ni kwa sababu const inachukua thamani ya mtumiaji yenyewe. Na hapa mtumiaji huweka kumbukumbu kwa kitu kimoja wakati wote. Mstari (*) unaingia ndani ya kitu, haujakabidhiwa tena kwa mtumiaji. Const itatoa hitilafu ikiwa utajaribu kuweka mtumiaji na kitu kingine. Kuunganisha na kuunganisha, Object.assign huunda marejeleo mengine kwa kitu sawa ikiwa kinahitaji kunakiliwa. Hili pia linaweza kutekelezeka, lakini ni gumu zaidi kwa sababu JavaScript haina mbinu iliyojengewa ndani. Kwa kweli, hii ni mara chache muhimu. Kunakili kwa kumbukumbu hutumiwa katika hali nyingi. Lakini ikiwa unahitaji hii kweli, basi unahitaji kuunda kitu cha JavaScript na kuiga muundo wa iliyopo, kuiga mali zake kwa kiwango cha zamani. Chini ni mfano.


    Na unaweza pia kutumia Object.assign mbinu kwa hili. Hoja dest na src1, ..., srcN ni vitu. Inakili mali ya vitu vyote src1, ..., srcNINTO dest. Kwa maneno mengine, mali ya hoja zote, kuanzia ya pili, zinakiliwa hadi 1. Kisha inarudi kwenye hali mbaya. Kwa mfano, unaweza kuitumia kuchanganya vitu kadhaa kuwa moja.


    Na pia unaweza kutumia Object.assign kuchukua nafasi ya kitanzi cloning rahisi. Hunakili mali zote za mtumiaji kwa kitu tupu na kurudisha, kama kitanzi, lakini kifupi. Hadi sasa, imechukuliwa kuwa mali zote za watumiaji ni za zamani. Lakini mali inaweza kuwa marejeleo ya vitu vingine.

    Ili kurekebisha hili, unahitaji kutumia kitanzi cha clone ambacho huangalia kila thamani ya mtumiaji na, ikiwa ni kitu, kisha huiga muundo wake. Hii inaitwa "cloning ya kina."

    Ipo algorithm ya kawaida cloning ya kina, ambayo hushughulikia kesi iliyo hapo juu na kesi ngumu zaidi inayoitwa algorithm ya uundaji wa muundo. Ili kuepuka kurejesha gurudumu, unaweza kutumia utekelezaji wa kazi kutoka kwa maktaba ya JavaScript ya lodash, njia inaitwa _.cloneDeep(obj).

    Mbinu za Juu

    Ikiwa programu itazunguka juu ya kitu na anataka kupata mali zote kwa mpangilio sawa ziliongezwa, anaweza kutegemea "kuagiza maalum," ambapo sifa kamili hupangwa na zingine huundwa kwa mpangilio ambao kitu cha JavaScript kiliundwa. .

    Mbinu za hali ya juu hushughulikia dhana ambazo hazitumiki sana katika JavaScripting. Hii ni kwa sababu katika hali za kawaida vipengele hivi vya nguvu hazihitajiki. Baadhi ya njia hizi huenda zisifanye kazi katika vivinjari vya zamani, kama vile matoleo ya mapema ya Netscape 4.

    Mfano huo unaweza kutumika kuunda vipengee vya JavaScript na mbinu zote za mycircle, sio tu mpya. Hii ina athari mchanganyiko ya utendaji. Hawapaswi kuhifadhi nakala za mtu binafsi mbinu kwa kila mfano wa kitu, kwa hivyo inaweza kuhitaji kumbukumbu kidogo kufanya kazi, lakini kivinjari lazima kitafute wigo wa sasa na mzazi ili kuzipata. Hii inaweza kusababisha ucheleweshaji uliokithiri. Kwa ujumla, mtumiaji anapaswa kutumia kile kinachofaa kwa msimbo badala ya kuegemeza uamuzi huo kwenye utendakazi, isipokuwa anashughulika na mazingira mahususi yaliyodhibitiwa.


    Rudi kweli

    Katika baadhi ya matukio, inaweza kuhitajika kwa mali ya kitu kufungwa kwa kitu chenyewe au mahali pengine kwenye mnyororo wa mfano. Katika JavaScript, vitu vyote hutumia njia ya hasOwnProperty, ambayo inarudi kuwa kweli ikiwa mali hiyo imefungwa kwa mfano. kitu tofauti. Katika kesi hii, inawezekana kuangalia ikiwa mjenzi wa kitu ana mali sawa na thamani sawa na mfano wa kitu yenyewe. Hii inaweza kutoa matokeo yasiyo sahihi ikiwa kuna sifa tofauti za kitu cha JavaScript thamani sawa kwa mfano wa kitu na mfano wa mzunguko. Njia ya hasOwnProperty inachukua kigezo kimoja - jina la mali kama kamba.


    Unaweza kuunda njia za kibinafsi kwa njia sawa. Ni kazi tu ambayo imeundwa ndani ya kazi ya mjenzi. Hii inaweza kuonekana kuwachanganya wengine, lakini ndivyo inavyofanya kazi. Shughuli ya kibinafsi inaweza kuitwa tu na mjenzi yenyewe au kwa njia ambazo zinafafanuliwa kwenye mstari. Zinaweza kutumika kama njia za umma ikiwa zimepewa mjenzi wa umma na kupatikana kwa kutumia njia za umma za vitu vya Javascript.

    kazi myob() ( kazi cantBeSeen() ( alert(secretValue);

    ) var secretValue = "";

    this.method1 = kazi () ( secretValue = "hakuna mshangao";!}

    this.method2 = cantBeSeen;

    ) var oneOb = myob mpya();

    oneOb.njia1();

    //tahadhari "hakuna mshangao" oneOb.method2();

    // alerts "hakuna mshangao".

    Amri Kigezo

    Vitu vya amri huruhusu mifumo iliyounganishwa kwa urahisi kwa kutenganisha zile zinazotoa ombi kutoka kwa vitu na zile zinazoshughulikia ombi. Maombi haya yanaitwa matukio, na msimbo unaochakata maombi huitwa washughulikiaji wa hafla.

    Tuseme unaunda programu zinazotumia vitendo vya ubao wa kunakili Kata, Nakili na Bandika. Vitendo hivi vinaweza kuanzishwa kwa njia tofauti katika programu tumizi: na mfumo wa menyu, menyu ya muktadha, kwa mfano, kwa kubofya kulia uwanja wa maandishi au njia ya mkato ya kibodi. Vitu vya amri hukuruhusu kuweka uchakataji wa vitendo hivi, moja kwa kila operesheni, wakati amri moja tu inahitajika kushughulikia maombi yote ya Kata, moja kwa ombi zote za Nakili, na moja kwa ombi zote za Bandika.

    Kwa sababu timu huweka uchakataji wote kati, pia mara nyingi huhusika katika kushughulikia vitendaji vya kutendua programu nzima. Maboresho makubwa yanaweza kupatikana kupitia matumizi ya kisasa Mbinu za JavaScript kusababisha utumizi bora zaidi, unaotegemewa na unaoweza kudumishwa.

    Ili kujifunza jinsi ya kufanya hivyo, unaweza kutumia violezo vya JavaScript + jQuery. Kifurushi hiki cha kipekee kinajumuisha JavaScript iliyoboreshwa kwa violezo vyote vya GoF kwa kutumia vipengele vya juu zaidi kama vile nafasi za majina, prototypes, moduli, vipengee vya kukokotoa, kufungwa, vitendaji visivyojulikana na zaidi. Ikiwa watumiaji wanahitaji zana za hivi karibuni na mbinu za violezo vya JavaScript, violezo vya jQuery na usanifu wa kiolezo basi hii chaguo bora kutumia. Kifurushi hiki kina thamani, habari za kisasa Kwa Watengenezaji wa JavaScript. Hivi ndivyo vilivyojumuishwa:

  • Violezo vya GoF vilivyoboreshwa na JavaScript.
  • Miundo ya Kisasa ya Usanifu wa JavaScript.
  • Miundo ya Kubuni ya Muundo-Mtazamo.
  • jQuery kubuni templates.
  • Miundo ya usanifu wa nahau za JavaScript.
  • Mfano wa programu (MVC, SPA, nk.)
  • Misingi iliyopendekezwa ya syntax ya kitu cha JavaScript ni muhimu sana kwa waanzisha programu. Mtu lazima kwanza aelewe vitu, basi kutakuwa na ujuzi wa programu inayolenga kitu. Ni muhimu kuwa na uelewa wa kina wa nyenzo hii kwani hutumika kama msingi wa lugha yote ya JavaScript.

    Kazi :

    1. Kuna vitu vitatu (magari matatu): kwanza_Gari, pili_Gari na tatu_Gari.

    2. Kila moja ya vitu (magari) ina seti ya mali na maadili yao yanayolingana (sifa za gari).

    3. Fikiria moja ya vitu:

    var first_Car = (
    tengeneza: "VAZ" , /* mtengenezaji */
    mfano: 2106 , /* mfano */
    mwaka: 1980 , /* mwaka wa utengenezaji */
    rangi: "beige" , /* rangi */
    abiria: 5 , /* idadi ya abiria */
    inayoweza kugeuzwa: uongo, /* juu inayoweza kubadilika */
    maili: 80000 /* maili */
    }

    Sifa za kutengeneza na rangi zina maadili ya kamba;

    Mfano , mwaka , abiria na mali ya mileage ni maadili ya nambari;

    Mali inayoweza kubadilishwa inakubali thamani ya boolean.

    Unahitaji kufanya yafuatayo:

    Andika kitendakazi kinachokagua gari kwa kutumia vigezo viwili (mwaka wa utengenezaji na mileage) na hurejesha thamani ya boolean true au false .

    Maelezo:

    1. Kazi ina moja parameter gari , ambayo inapokea moja ya vitu 3. Kwa mfano, gari lililojadiliwa hapo juu ni first_Car.

    2. Chaguo la kukokotoa lazima lifanye kazi na kitu chochote sawa.

    Kazi ya kuangalia kitu - kweli au si kweli

    /* Kitu cha 1 */
    var first_Car = (
    tengeneza: "VAZ",
    mfano: 2106,
    mwaka: 1980,
    rangi: "beige",
    abiria: 5,
    inayoweza kubadilishwa: uongo,
    maili: 80000
    }

    /* Kitu cha pili */
    var second_Car = (
    kutengeneza: "VW",
    mfano: "Passat b3",
    mwaka: 1990,
    rangi: "neptune",
    abiria: 5,
    inayoweza kubadilishwa: uongo,
    maili: 160000
    }

    /* kitu cha 3 */
    var third_Car = (
    kutengeneza: "Hyundai",
    mfano: "Solaris",
    mwaka: 2012,
    rangi: "lami mvua",
    abiria: 5,
    inayoweza kubadilishwa: uongo,
    maili: 15000
    }


    kazi nzuri_Gari(gari) (
    ikiwa (gari. mwaka< 2000 ){
    kurudi kwa uwongo;
    }
    vinginevyo ikiwa (gari. mileage > 50000 )(
    kurudi kwa uwongo;
    }
    mwingine (
    kurudi kweli;
    }
    }

    /* Piga kazi na toa matokeo */
    var result = good_Car ( third_Car );

    hati. kuandika (matokeo);

    Maoni juu ya suluhisho:

    • Kwa hivyo tuna vitu vitatu (magari matatu), ambayo kila moja inaweza kuchanganuliwa kwa kutumia kipengele cha good_Car.
    • Kitendaji cha good_Car kina kigezo kimoja cha gari , ambacho kinaweza kuwa chochote kati ya vitu hivyo (magari): first_Car , second_Car or third_Car : function good_Car(gari) .
    • Mwili wa Good_Car Function una hali kulingana na ambayo:

      Ikiwa thamani ya mwaka ya mali ya kitu cha gari ni chini ya 2000 (kwa maneno mengine: ikiwa gari ni chini ya umri wa miaka 2,000), basi kazi inarudi uongo;

      Vinginevyo, ikiwa thamani ya mali ya kifaa cha gari ni kubwa kuliko 50000 (ikiwa umbali wa gari ni zaidi ya 50,000), basi kazi inarudi uongo;

      Vinginevyo chaguo la kukokotoa litarudi kuwa kweli.

    • Ifuatayo, tunaita kazi na kutaja kitu cha tatu_Car kama parameta (gari la tatu), ambayo hupita mtihani kwa mafanikio. Matokeo ya kazi huhifadhiwa katika mabadiliko ya matokeo:
      var result = good_Car(third_Car); .
    • Tofauti ya matokeo huonyeshwa kwenye skrini;
    • Vitu vingine viwili (gari) haitakidhi mahitaji ya masharti.
    Uboreshaji wa msimbo

    Wacha tuendelee kufanya kazi na vitu kwenye javascript.

    Kwa hivyo, kazi iliyojadiliwa hapo juu wakati wa kuangalia vitu (magari) inarudi kweli au uongo (kweli au uongo).

    Unaweza kuboresha kidogo ubora wa mtazamo wa suluhisho la tatizo linalozingatiwa, yaani, badala ya kweli au uongo, onyesha maandishi fulani. Ili kufanya hivyo, tutaunda hali ya kuchambua matokeo.

    /* Kitu cha 1 */
    var first_Car = (
    tengeneza: "VAZ",
    mfano: 2106,
    mwaka: 1980,
    rangi: "beige",
    abiria: 5,
    inayoweza kubadilishwa: uongo,
    maili: 80000
    }

    /* Kitu cha pili */
    var second_Car = (
    kutengeneza: "VW",
    mfano: "Passat b3",
    mwaka: 1990,
    rangi: "neptune",
    abiria: 5,
    inayoweza kubadilishwa: uongo,
    maili: 160000
    }

    /* kitu cha 3 */
    var third_Car = (
    kutengeneza: "Hyundai",
    mfano: "Solaris",
    mwaka: 2012,
    rangi: "lami mvua",
    abiria: 5,
    inayoweza kubadilishwa: uongo,
    maili: 15000
    }

    /* Kazi ya kuangalia kitu */
    kazi nzuri_Gari(gari) (
    ikiwa (gari. mwaka< 2000 ){
    kurudi kwa uwongo;
    }
    vinginevyo ikiwa (gari. mileage > 50000 )(
    kurudi kwa uwongo;
    }
    mwingine (
    kurudi kweli;
    }
    }


    var result = good_Car ( third_Car );

    ikiwa (matokeo) (
    hati. andika ("Una gari zuri: " + third_Car . year + " mwaka wa utengenezaji, na mileage " + third_Car .mileage + " km." );
    }
    mwingine (
    hati. andika ("Hatutazungumza juu ya gari lako ...");
    }

    Suluhisho na hali ya matokeo - Matokeo ...

    Masharti ya kuchambua matokeo ni kama ifuatavyo.

    • Usemi wa if(matokeo) ni namna ya mkato wa usemi
      if(matokeo == kweli) .
    • Ikiwa matokeo ya utendakazi wa good_Car ni kweli, basi tunaonyesha maneno: "Una gari zuri: 2012, na maili ya kilomita 15,000," ambapo

      2012 na 15000 ni maadili ya mwaka na mali ya mileage ya kitu cha tatu_gari.

    • Ikiwa hali ya kuangalia matokeo hutoa thamani ya uongo ya uongo , basi tutaona: "Hatutazungumza kuhusu gari lako ...". Hiyo ni, kitu katika swali (gari) hawakufaulu mtihani.
    Uboreshaji wa msimbo - Kusonga - Kuongeza chaguo za kukokotoa

    Lakini sio hivyo tu. Angalia kwa karibu kijisehemu cha msimbo cha kupiga kazi na kuchanganua matokeo:

    /* Piga simu na uchambue matokeo */
    var result = good_Car( third_Car );

    ikiwa (matokeo) (
    document.write("Una gari zuri: " + third_Car .year +" mwaka wa utengenezaji, na maili " + third_Car .mileage + " km.");
    }
    mwingine (
    document.write("Hatutazungumza kuhusu gari lako....");
    }

    Hapa kuna kitu cha tatu_Gari (gari la tatu) imeonyeshwa mara tatu:

    • Mara ya kwanza kitendakazi cha good_Car kinapoitwa, kinabainishwa kama kigezo chake: good_Car(third_Car) .
    • Na kisha inaonekana mara mbili zaidi tunapoifikia ili kuonyesha sifa zake: third_Car.year na third_Car.mileage .

    Sikuipenda hii kwa sababu wakati wa kuchambua kitu kingine (gari) itabidi tuonyeshe jina lake mara tatu pia!!!

    Ili kufikia dalili ya mara moja ya kitu kilichochanganuliwa, unahitaji matokeo ya utendaji mzuri wa gari_gari na uchanganuzi wa matokeo haya. (Ni hayo tu) kuweka katika utendaji mwingine.

    /* Kitu cha 1 */
    var first_Car = (
    tengeneza: "VAZ",
    mfano: 2106,
    mwaka: 1980,
    rangi: "beige",
    abiria: 5,
    inayoweza kubadilishwa: uongo,
    maili: 80000
    }

    /* Kitu cha pili */
    var second_Car = (
    kutengeneza: "VW",
    mfano: "Passat b3",
    mwaka: 1990,
    rangi: "neptune",
    abiria: 5,
    inayoweza kubadilishwa: uongo,
    maili: 160000
    }

    /* kitu cha 3 */
    var third_Car = (
    kutengeneza: "Hyundai",
    mfano: "Solaris",
    mwaka: 2012,
    rangi: "lami mvua",
    abiria: 5,
    inayoweza kubadilishwa: uongo,
    maili: 15000
    }

    /* Kazi ya kuangalia kitu */
    kazi nzuri_Gari(gari) (
    ikiwa (gari .mwaka< 2000){
    kurudi kwa uwongo;
    }
    vinginevyo ikiwa (gari .mileage> 50000)(
    kurudi kwa uwongo;
    }
    mwingine (
    kurudi kweli;
    }
    }

    /* Ingiza matokeo ya utendakazi mzuri_wa Gari na Uchambuzi wa matokeo kwenye kitendakazi kingine */
    kazi itog(gari)(
    var result = good_Car(gari);

    Ikiwa (matokeo) (
    document.write("Una gari zuri: " + gari .mwaka +" mwaka wa utengenezaji, lenye maili " + gari .mileage + " km.");
    }
    mwingine (
    document.write("Hatutazungumza kuhusu gari lako....");
    }
    }

    itog( tatu_Gari);

    Suluhisho kwa kutumia kitendakazi kingine - Matokeo...

    Una gari nzuri: iliyotengenezwa mwaka 2012, na mileage ya kilomita 15,000.