שדות ושיטות של כיתות

שדות

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

class MyClass {
    myField;
}

const myClassInstance = new MyClass();

myClassInstance;
> MyClass { myField: undefined }

אפשר לאתחל שדה עם ערך. לרוב זהו ערך ברירת המחדל הלוגיקה בתוך הכיתה יכולה להחליף:

class MyClass {
    myResult = false;
    set setValue( myValue ) {
        this.myResult = myValue;
    }
}
const myClassInstance = new MyClass();

myClassInstance;
> Object { myResult: false }

myClassInstance.setValue = true;

myClassInstance;\
> Object { myResult: true }

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

class MyClass {
    myField = true;
}

const myClassInstance = new MyClass();

myClassInstance.myField;
> true

myClassInstance.myField = false;

myClassInstance.myField;
> false;

השדות הם הבסיס לכמה מהתכונות המתקדמות יותר של הכיתות.

שדות פרטיים ו-methods

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

כדי להפוך נכס לפרטי, צריך להוסיף # בתחילת המזהה כאשר עליך:

class MyClass {
    #myPrivateField = true;
    #myPrivateMethod() {}
}
const myClassInstance = new MyClass();

myClassInstance;
> MyClass { #myPrivateField: true }
    #myPrivateField: true
    <prototype>: Object {  }
        constructor: class MyClass {}
        <prototype>: Object {  }

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

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