Malumot bo'yicha ishlash
Havola - bu turli xil nomlar bilan ob'ektga kirish vositasi. Har qanday ob'ektlar bilan ishlash faqat ma'lumotnoma orqali amalga oshiriladi.
Buni misol bilan namoyish qilaylik:
test \u003d function () (ogohlantirish ("Salom!")) // Funktsiya yarating (ogohlantirish ("Salom!")) (Va funktsiya, esimizda bo'lganidek, to'liq ob'ekt) va test o'zgaruvchisini unga havola qiling.
test_link \u003d test; // test_link endi bizning funktsiyamizga ham tegishli
test (); // Salom!
test_link (); // Salom!
Ko'rib turganimizdek, birinchi havola ham, ikkinchisi ham bir xil natijani beradi.
Bizda test deb nomlangan funktsiya yo'qligini va sinov o'zgaruvchisi qandaydir "asosiy" yoki "asosiy" havola emasligini va "test_link" ning kichik ekanligini anglab etishimiz kerak.
Bizning vazifamiz, boshqa har qanday ob'ekt singari, faqat xotiradagi maydon bo'lib, ushbu sohaga oid barcha havolalar mutlaqo tengdir. Bundan tashqari, ob'ekt hech qanday ma'lumotnomaga ega bo'lmasligi mumkin - bu holda u anonim deb nomlanadi va faqat yaratilgandan so'ng darhol foydalanish mumkin (masalan, funktsiyaga o'tgan), aks holda unga kirish imkonsiz bo'ladi va tez orada u axlat yig'uvchi tomonidan yo'q qilinadi. (axlat yig'ish), bu moslamalarni mos yozuvlarsiz o'chirib tashlaydi.
Keling, buni tushunish nima uchun juda muhimligini ko'rib chiqaylik:
test \u003d (prop: "qachondir") // Prop xususiyati bilan ob'ekt yarating
test_link \u003d test; // Ushbu ob'ektga yana bir havola yarating
Ogohlantirish (test.prop); // qachondir
// Ob'ektning xususiyatini o'zgartirish
test_link.prop \u003d "yangi matn";
Ogohlantirish (test.prop); // yangi matn
ogohlantirish (test_link.prop); // yangi matn
/ * Aytish mumkinki, mulk bu erda va u erda o'zgargan - ammo unday emas.
Ob'ekt bitta. Shunday qilib, mulk bir marta o'zgardi va havolalar faqat qaerga ishora qilsa bo'ladi. * /
// Yangi xususiyat qo'shing va eskisini olib tashlang
test.new_prop \u003d "salom";
test.prop-ni o'chirish;
Ogohlantirish (test_link.prop); // undefined - bu xususiyat endi mavjud emas
ogohlantirish (test_link.new_prop);
// Havolani olib tashlang
testni o'chirish;
ogohlantirish (test.new_prop);
/ * Bu vaqtda skript xatoga yo'l qo'yadi, chunki test endi mavjud emas va test.new_prop umuman mavjud emas * /
ogohlantirish (test_link.new_prop); // Salom
/ * lekin bu erda hamma narsa tartibda, chunki biz ob'ektning o'zi emas, balki unga havolani o'chirib tashladik. Endi bizning ob'ektimiz bitta test_link * / havolasi orqali ko'rsatiladi
// Yangi ob'ekt yarating
test \u003d test_link; // Birinchidan, yana sinov havolasini yarating
test_link \u003d (prop: "biron vaqt") // Va bu yangi ob'ekt
Ogohlantirish (test_link.prop); // qachondir
ogohlantirish (test.prop); // aniqlanmagan
/ * Yangi ob'ektni yaratish havolani uzadi va endi test va test_link turli ob'ektlarga yo'naltiradi.
Aslida, bu test_linkini o'chirish va uni qayta yaratish bilan bir xil, ammo boshqa ob'ektga ishora qilish * /
ogohlantirish (test.new_prop); // salom - endi test bizning birinchi ob'ektimizga havolani o'z ichiga oladi
* Ushbu manba kodi ta'kidlash manbai bilan ta'kidlangan.
Ob'ektlarning bunday xatti-harakatlari ko'pincha yangi boshlanuvchilar uchun juda ko'p savollarni tug'diradi, shuning uchun bu matn aniqlik kiritadi deb umid qilaman. Agar biz bog'lanishni emas, balki ob'ektning haqiqatan ham yangi, mustaqil nusxasini yaratmoqchi bo'lsak, unda buning yagona usuli bu yangi ob'ekt yaratish va u erda kerakli xususiyatlarni nusxalashdir.
Shuni ham ta'kidlash joizki, moslamalar bilan ishlash, yuqorida aytib o'tilgan kulgili effektlardan tashqari, xotirani sezilarli darajada tejashga imkon beradi, bu bitta ob'ekt dasturning turli joylarida keng qo'llanilganda muhimdir.
Do'stlaringiz bilan baham: |