היום למדתי: משתנים פרטיים ב JavaScript

01/08/2019

אז אנחנו כבר יודעים ש JavaScript רצה מהר ואחד הפיצ'רים שכבר נכנסו לדפדפנים (ול Node.JS) נקרא משתני מחלקה פרטיים. בואו נראה בגדול מהם ואיך משתמשים בהם.

1. הגדרה ושימוש במשתנים פרטיים

משתני מחלקה פרטיים הם משתני מחלקה שאפשר לגשת אליהם או לשנות אותם רק מקוד שכתוב בתוך המחלקה עצמה. הדרך להגדיר אותם ב JavaScript היא ליצור משתני מחלקה ששמם מתחיל בסימן הסולמית. אז נכון שסולמית לא נראה הכי טוב ותכל'ס כולם רצו שטרודל כדי שיראה כמו רובי, אבל בגלל ששטרודלים היו תפוסים בשביל Decorators היה צריך להיות יצירתיים.

נשים לב שבניגוד למשתני מחלקה רגילים, כשמדובר במשתנים פרטיים אנחנו חייבים להצהיר עליהם בעת יצירת המחלקה שזה אומר לציין בתוך קוד המחלקה מחוץ לכל הפונקציות את שמות המשתנים הפרטיים שלנו.

הקוד הבא מגדיר מחלקה בשם Counter עם משתנה פרטי בשם #val:

class Counter {
  #val
  constructor() {
    this.inc = this.inc.bind(this);
    this.#val = 0;
  }

  inc() {
    return ++this.#val;
  }
}

קוד חיצוני שייצור לעצמו אוביקט Counter וינסה לשנות את הערך של val ייכשל ויקבל הודעת שגיאה:

const c = new Counter();

// Error - #val is private
c.#val = 999;

2. קודפן

אם בא לכם לשחק עם זה יצרתי כאן קודפן שאפשר להריץ בדפדפנים. אצלי בכרום זה עובד מעולה אבל פיירפוקס עדיין לא תומך. לחצו על הכפתור ואם הכל עובד ערך המונה יעלה ב-1 עם כל לחיצה:

3. שאלות נפוצות וקריאת המשך

רשימה של שאלות נפוצות ומידע נוסף על הפיצ'ר אפשר למצוא בקישור: https://github.com/tc39/proposal-class-fields/blob/master/PRIVATESYNTAXFAQ.md