טייפּסקריפּט פּריוואַט קלאַס פּראָפּערטיעס

טיפּעסקריפּט שטיצט פּריוואַט פּראָפּערטיעס פֿאַר קלאסן

אַקסעס קאָנטראָל אין טייפּסקריפּט קלאסן

פילע פּראָגראַממינג שפּראַכן דעפינירן די קלאסן 'פּראָפּערטיעס ווי פּריוואַט ווי פעליקייַט. צו מאַכן זיי צוטריטלעך פֿון דעם פאַל, איר יוזשאַוואַלי האָבן צו צייכן די באַטייַטיק פּראָפּערטיעס מיט די קיווערד "עפנטלעך".

די זעלבע קיווערד איז אויך בארעכטיגט אין טייפּסקריפּט קלאסן, אָבער עס האט נישט אַ פּלאַץ פון פּראַל, ווייַל פּראָפּערטיעס אין טייפּסקריפּט קלאסן זענען עפנטלעך דורך פעליקייַט. דער קאַנסטריינט איז ינכעראַטיד פון דזשאַוואַסקריפּט, וואָס קען נישט שטיצן פּריוואַט פּראָפּערטיעס אין קלאסן. נו, ביז לעצטנס.

פּריוואַט פעלדער אין דזשאַוואַסקריפּט?

יא און ניין. דערווייַל, אַ ארבעטן פּלאַן פֿאַר אַ ספּעק וואָס דיפיינז פּריוואַט פּראָפּערטיעס אין דזשאַוואַסקריפּט קלאסן איז אין בינע 3, וואָס ינדיקייץ אַ לעצט דעפֿיניציע איז גלייבלעך, אָבער נישט נאָך זיכער.

די פארגעלייגט ענדערונגען אין די ספּעק זענען טאַקע פּשוט און בלויז מאָדיפיצירן די סינטאַקס. צו פאַרצייכענען אַ פאַרמאָג ווי פּריוואַט, פשוט פּרעפיקס עס מיט אַ היגהטאַג. דאס איז עס!

class User {
  // A prop marked as private.
  #id;
  age;
  
  constructor(age){
    this.age = age;
    // Valid assignment, as we're 
    // within the class.
    this.#id = Math.floor(Math.random() * 1000);
  }
}

// ... Later in the code ...

const user = new User(42);
// Error! Won't work as it's private.
user.#id = 123;

פּריוואַט פעלדער אין טייפּסקריפּט!

דער זעלביקער סינטאַקס אַפּלייז פֿאַר פּריוואַט פּראָפּערטיעס אין טייפּסקריפּט. זינט ווערסיע 3.8, איר קענען נוצן דעם שטריך צו בעסער קאָנטראָלירן אַקסעס צו פּראָפּערטיעס און פאַנגקשאַנז פֿאַר ינסטאַנסיז און סטאַטיק פעלדער. די סינטאַקס איז די זעלבע ווי אין די דזשאַוואַסקריפּט בייַשפּיל.

איין מאָמענט ביטע, פּריוואַט סטאַטיק פעלדער?

יאָ, איר'ווע לייענען רעכט: סטאַטיק וועריאַבאַלז און פאַנגקשאַנז קענען אויך זיין פּריוואַט, וואָס מיטל אַז זיי קענען זיין גערופֿן בלויז אין די מיטגלידער פון דער קלאַס. דער שטריך איז צוגעגעבן מיט טיפּעסקריפּט ווערסיע 4.3, צוזאַמען מיט ווייַטער ענדערונגען אונטער די קאַפּטער. לויט די דאַקיומענטיישאַן פֿאַר ווערסיע 4.3, פּריוואַט קלאַס מיטגלידער זענען איצט טאַקע פּריוואַט אין רונטימע, וואָס ינדיקייץ דעם שטריך איז גאָר מאַטיורד.

ביטע טאָן אַז טייפּסקריפּט שטיצט צוויי פאַרשידענע וועריאַנץ פון "פּריוואַט" פֿאַר קלאסן. די מערסט באַוווסט איז מיט די קיווערד "פּריוואַט", וואָס האלט די אנגעצייכנט פעלדער ניט צוטריטלעך אפילו פֿון דערייווד קלאסן.

די אנדערע שטריך, וואָס איז די וואָס איך ווייַזן דאָ און וואָס איז נייַ, איז די נוצן פון אַזוי גערופענע "פּריוואַט נעמען". זיי זענען די זעלבע סינטאַקס ווי פֿאַר Javascript, ווייַל זייער ספּעציפיצירן איז דיפיינד דורך JS ערידזשנאַלי. אין טיפּעסקריפּט, זיי קאָנטראָלירן די אַקסעס בעשאַס רונטימע.

/**
 * A class that uses already known
 * private props.
 */
class CommonUser {
  // Common 'private' prop in TS.
  private id: number;
  age: number;
  
  constructor(age: number){
    this.age = age;
    this.id = Math.floor(Math.random() * 1000);
  }
}

/**
 * Using the new sytanx for private class names.
 */
class SpecialUser {
  #id: number;
  age: number;
  
  constructor(age: number){
    this.age = age;
    // Valid, we're inside the class.
    this.#id = SpecialUser.#generateId();
  }
  
  static #generateId(){
    return Math.floor(Math.random() * 1000);
  }
  
  #stringifyId(){
    return this.#id.toString();
  }
}

// ... Later in the code ...

// Invalid, call is outside of class 'SpecialUser'.
SpecialUser.#generateId();

const user = new SpecialUser(42);
// And that won't work as well.
user.#stringifyId();

לעצטע ווערטער פֿאַר די לעצטע קאַפּיטל

דער אַרטיקל איז נישט זייער לאַנג, אָבער כיילייץ אַ גרויס פֿעיִקייטן טיפּעסקריפּט אָפפערס איצט ווי אַ מער אַלגעמיין נוץ פון טיפּעסקריפּט זיך. פֿאַר דזשאַוואַסקריפּט, פּריוואַט פּראָפּערטיעס זענען נאָך אַ פּלאַן (כאָטש אין אַ זייער שפּעט בינע), אָבער פֿאַר טיפּעסקריפּט זיי זענען שוין ימפּלאַמענאַד און שיפּט, וואָס ווייזט די גיכקייט אין וואָס די שפּראַך איז יוואַלווינג!

פֿאָרשלאָגן

פֿאַרבונדענע

נאָך-וואָרט

שפּראַכן