التغليف
جزء من قسم البرمجة كائنية التوجه في رحلة JavaScript على Coddy. الدرس 17 من 56.
التغليف هو عملية دمج data داخل class في وحدة واحدة.
يساعد ذلك على وضع قيود على الوصول إلى data الخاصة بـ class مباشرةً، مما يساعدنا في النهاية على منع أي تعديل عرضي على data.
لنرَ encapsulation قيد التطبيق من خلال مثال بسيط. أنشئ كائنًا أساسيًا بخصائص عامة:
const user = {
name: "John",
email: "john@example.com"
};يمكن لأي شخص الوصول إلى هذه الخصائص وتعديلها مباشرةً:
user.name = "Jane"; // سهل التعديل من الخارج
console.log(user.email); // سهل الوصول من الخارجيستخدم نهج أكثر تغليفًا الإغلاقات لإخفاء البيانات:
function createUser(name, email) {
// هذه المتغيرات خاصة (مُغلَّفة)
let userName = name;
let userEmail = email;
// أرجع كائنًا يحتوي على دوال للتفاعل مع البيانات الخاصة
return {
getName: function() {
return userName;
},
getEmail: function() {
return userEmail;
},
setName: function(newName) {
userName = newName;
}
};
}
const encapsulatedUser = createUser("John", "john@example.com");الآن، للتفاعل مع البيانات:
console.log(encapsulatedUser.getName()); // "John"
encapsulatedUser.setName("Jane");
console.log(encapsulatedUser.getName()); // "Jane"
// لا يمكن الوصول إلى البيانات مباشرة
console.log(encapsulatedUser.userName); // undefinedالتحدي
تم إعطاؤك تعليمات برمجية تستخدم التغليف لحماية بيانات المستخدم. مهمتك هي إضافة أسلوب getAge() للوصول إلى العمر.
ستتحقق الاختبارات مما يلي:
- وجود أسلوب
getAge() - أنه يعيد العمر الصحيح
- بقاء معلومات العمر خاصة
الناتج المتوقع:
john_doe
25
جرّب بنفسك
import { createUser } from './createUser.js';
// كود الاختبار - لا تعدّل
const user = createUser("john_doe", 25);
console.log(user.getUsername()); // يجب أن يُخرج "john_doe"
console.log(user.getAge()); // يجب أن يُخرج 25
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس البرمجة كائنية التوجه
1الكائنات والكلمة المفتاحية this
مراجعة سريعة: الكائناتإضافة Methods إلى الكائناتفهم الكلمة المفتاحية thisConstructor Functionsالكلمة المفتاحية newتحدي المراجعة7الوراثة والكلمة المفتاحية extends
الوراثةعلاقة "is-a"الكلمة المفتاحية extendsالدالة super()وراثة الخصائص والوظائفتحدي المراجعة2تنظيم الكود
ما هي الـ Modules؟التصدير باستخدام exportالاستيراد باستخدام importالـ Default مقابل الـ Named Exports8تنظيم كود OOP
تنظيم الـ Classes في Modules11مشروع: مصيّر الأشكال
إعداد: فئة Shape والتصديروراثة فئة Circleإعادة التعريف ودالة المساحةعداد الأشكال Staticتدرّب بنفسك: مترجم JavaScript عبر الإنترنت