Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

Methods الخاصة

جزء من قسم Object Oriented Programming في رحلة JavaScript على Coddy — الدرس 19 من 56.

تسمح الميثودات الخاصة (Private methods) في كلاسات JavaScript بإخفاء تفاصيل التنفيذ ومنع الوصول الخارجي إلى الوظائف الداخلية.

بدءًا من ES2022، يمكن تعريف الطرق الخاصة (private methods) باستخدام البادئة #:

class Counter {
  #count = 0;
  
  // إنشاء دالة خاصة
  #increment() {
    this.#count++;
  }
  
  // دالة عامة تستخدم الدالة الخاصة
  addOne() {
    this.#increment();
    return this.#count;
  }
}

لنقم بإنشاء مثيل (instance) لـ Counter:

const myCounter = new Counter();

يمكننا استدعاء الدالة العامة:

console.log(myCounter.addOne()); // النتيجة: 1

لكن محاولة الوصول إلى الطريقة الخاصة مباشرة ستؤدي إلى حدوث خطأ:

myCounter.#increment(); // Error: Private method is not accessible outside class

تساعد الطرق الخاصة (Private methods) في الحفاظ على التغليف (encapsulation) من خلال إبقاء تفاصيل التنفيذ الداخلية مخفية عن العالم الخارجي.

challenge icon

التحدي

لقد تم إعطاؤك فئة MessageBox تقوم بتخزين الرسائل. مهمتك هي إضافة طريقة خاصة تسمى #isValidMessage(text) للتحقق من صحة الرسائل. يجب أن تقوم بـ:

  • إرجاع true إذا كان النص غير فارغ وأقل من 100 حرف
  • إرجاع false بخلاف ذلك

ورقة مرجعية

تُعرَّف الطرق الخاصة (Private methods) في أصناف JavaScript باستخدام البادئة # ولا يمكن الوصول إليها إلا من داخل الصنف:

class Counter {
  #count = 0;
  
  // طريقة خاصة
  #increment() {
    this.#count++;
  }
  
  // طريقة عامة تستخدم الطريقة الخاصة
  addOne() {
    this.#increment();
    return this.#count;
  }
}

لا يمكن الوصول إلى الطرق الخاصة من خارج الصنف:

const myCounter = new Counter();
myCounter.addOne(); // يعمل
myCounter.#increment(); // خطأ: لا يمكن الوصول إلى الطريقة الخاصة

تساعد الطرق الخاصة في الحفاظ على التغليف (encapsulation) من خلال إخفاء تفاصيل التنفيذ الداخلية.

جرّب بنفسك

import { MessageBox } from './messageBox.js';

// استخدام صندوق الرسائل
const box = new MessageBox();

console.log(box.setMessage("Hello"));    // "Message set!" (يستخدم #isValidMessage)
console.log(box.setMessage(""));         // "Invalid message!" (يستخدم #isValidMessage)
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Object Oriented Programming