اذهب إلى المحتوى

السؤال

نشر

في لغات مثل PHP و ++C و Java يمكن عمل توابع خاصة private أو توابع محمية protected في أي صنف، حاول أن أقوم بعمل مثل هذه التوابع في جافاسكريبت JavaScript ولكن لم أنجح.

هل توجد طريقة لعمل مثل هذه التوابع في جافاسكريبت أم أن اللغة نفسها لا تدعم مثل هذه المميزات؟

Recommended Posts

  • 1
نشر

نعم يمكنك ذلك بإضافة الرمز # أثناء تعريف الـ  properties والـ methods في الـ class : 

class Something {
  // Private properties إضافة
  #property;

  constructor(){
    this.#property = "test";
  }

  // Private methods إضافة
  #privateMethod() {
    return 'hello world';
  }

  getPrivateMessage() {
      return this.#property;
  }
}

const instance = new Something();
console.log(instance.property); //=> undefined
console.log(instance.privateMethod); //=> undefined
console.log(instance.getPrivateMessage()); //=> test
console.log(instance.#property); //=> Syntax error

لاحظ انه لا يمكن الوصول للكل من الـ private properties و الـ private methods إلا من داخل class.

  • 0
نشر

بالنسبة للخواص المحمية Protected يصطلح تسميتها بداية مع underscore _ و يمن حماية القيم من التعديل بتوفر دالة get فقط، و عدم وضع set ضمن تعريف الصنف.

  • حماية الخواص من قيم خاطئة
class Person {
  _age = 0;

  set setAge(value) {
    if (value < 0) {
      value = 0;
    }
    this._age = value;
  }

  get getAge() {
    return this._age;
  }

  constructor(age) {
    this._age = age;
  }

}

let p = new Person(100);

// تعديل العمر
coffeeMachine.waterAmount = -10; // _age يصبح  0, وليس -10

مثال آخر:

  • حماية الخواص من الإسناد بشكل تام (منع إسناد قيمة جديدة)
class Person {
  // ...

  constructor(value) {
    this._age = value;
  }

  get age() {
    return this._age;
  }

}

let p = new Person(100);

alert(`Age is: ${p.age} Year`); // Age is: 100

p.age = 25; // Error (no setter) لا يتم تطبيقها

console.log(p.age) // 100

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...