Yuqorida aytib o'tganimdek, String va Number ma'lumotlar turlari ham ob'ektlar, ham ibtidoiy qiymatlar bo'lishi mumkin.
obj \u003d yangi String ("salom"); // Ob'ekt sifatida satr yarating
oddiy \u003d "salom"; // Ibtidoiy qiymat yarating
Ogohlantirish (obj); // Salom
ogohlantirish (oddiy); // salom - hozircha hamma narsani taxmin qilish mumkin
Ogohlantirish (uzunlik); // 6 - String turidagi ob'ektda uzunlik xususiyati bor, u mag'lubiyat uzunligini saqlaydi
ogohlantirish (oddiy uzunlik); // 6
/ * Oddiy narsa emasligiga qaramay, biz String ob'ekti kabi bir xil xususiyatlar to'plamiga kirishimiz mumkin. Bu juda qulay * /
Obj.prop \u003d "matn";
simple.prop \u003d "matn";
Ogohlantirish (obj.prop); // matn - obj oddiy ob'ekt bo'lgani uchun, biz unga yana bitta xususiyatni osonlikcha berishimiz mumkin
ogohlantirish (simple.prop); // noaniq - lekin oddiy narsa ob'ekt emas va bu raqam biz uchun ishlamaydi
* Ushbu manba kodi ta'kidlash manbai bilan ta'kidlangan.
Xuddi shu narsa son va mantiq turlari uchun ham amal qiladi (faqat ular uzunlik xususiyatiga ega emas, lekin boshqa bir qator ajoyib xususiyatlar mavjud).
Iplar va raqamlarni ob'ekt sifatida ishlatish amaliy maqsadga muvofiq emas. ibtidoiy qadriyatlar bilan ishlash qulayroq, lekin shu bilan birga barcha kerakli funktsiyalarni saqlab qoladi. Biroq, rasmni to'ldirish uchun ushbu mexanizmni tushunish kerak.
Ibtidoiy qadriyatlarni literallardan foydalanish bilan aralashtirib yubormang - masalan, "test \u003d new Array ()" yoki "test \u003d" shaklida qator yaratganligimizdan qat'i nazar, natija baribir bir xil ob'ekt bo'lib qoladi. Biz hech qanday ibtidoiy qadriyatlarga ega bo'lmaymiz.
Shunday qilib, class-object paradigmasi amalga oshiriladigan tillardan farqli o'laroq, biz avval sinf yaratishimiz shart emas, keyin sinf ob'ektini yaratamiz. Biz darhol ob'ektni yaratishimiz mumkin, uni quyidagi misolda qilamiz:
test \u003d (
simple_property: "Salom",
object_property: (
user_1: "Petya",
user_2: "Vasya"
},
function_property: function (foydalanuvchi) {
ogohlantirish (bu .simple_property + "," + this .object_property);
}
}
Test.function_property ("user_1"); // Salom, Petya.
* Ushbu manba kodi ta'kidlash manbai bilan ta'kidlangan.
Bizning oldimizda 3 ta xususiyatga ega bo'lgan sinov ob'ekti turibdi, ularning nomlari o'zlari uchun gapiradi deb umid qilaman. Bu erda bizni ko'proq qiziqtirgan narsa funktsiyani o'z ichiga olgan function_property xususiyati. Bunday funktsiyani ob'ekt usuli deb atash mumkin.
Bizning funktsiyamiz ushbu kalit so'zni ikki marta ishlatadi, bu funktsiya chaqirilgan ob'ektga ko'rsatgich (ya'ni mos yozuvlar). Shunday qilib, this.simple_property \u003d test.simple_property \u003d "Salom", va this.object_property \u003d test.object_property \u003d "Petya".
Shuni aniq anglash kerakki, bu har doim u tegishli bo'lgan ob'ektga emas, balki funktsiya chaqirilgan ob'ektga tegishli. Ushbu misolda u bir xil ob'ekt bo'lsa-da, bu har doim ham shunday emas.
test.function_property ("user_1"); // Salom, Petya.
Test2 \u003d yangi ob'ekt (); // test2 \u003d () ga o'xshash yangi ob'ektni yaratishning yana bir shakli.
Test.function_property.call (test2, "user_1"); //Xato
/ * Qo'ng'iroq qilish usuli boshqa ob'ekt nomidan funktsiyani chaqirishga imkon beradi. Bunday holda biz test ob'ekti function_property usulini chaqiramiz va bu endi sinov ob'ektiga emas, balki test2 ob'ektiga ishora qiladi. Va beri unda object_property xususiyati yo'q, keyin this.object_property-ni olishga harakat qilsangiz, skript xatoga yo'l qo'yadi * /
// vaziyatni tuzatishga harakat qiling
test2.simple_property \u003d "Xayrli kun";
test2.object_property \u003d test.object_property; // Bunday holda, biz kodni takrorlamaslik uchun ob'ektni mos yozuvlar yordamida ishlatamiz
Test.function_property.call (test2, "user_1"); // Xayrli kun, Petya.
* Ushbu manba kodi ta'kidlash manbai bilan ta'kidlangan.
Ob'ektni yaratish va undan foydalanish uchun aniq qadamlar yo'qligi misoldan ham aniq bo'lishi kerak. Ob'ektni istalgan vaqtda istalgan vaqtda o'zgartirish mumkin - foydalanishdan oldin, keyin va hattoki. Bu "an'anaviy" OOPdan muhim farq.
Do'stlaringiz bilan baham: |