Apa fungsi simbol `#` di JavaScript?

Nov 23 2020

Saya menemukan kode yang berisi #tanda itu. Untuk apa itu digunakan? Kode tersebut terlihat seperti ini:

class someObject{
  #someMethod(){
    //do something 
  }
}

Jawaban

5 T.J.Crowder Nov 23 2020 at 20:05

Ini adalah sigil (bukan operator) yang menunjukkan bahwa anggota tersebut bersifat pribadi - dalam hal ini, metode pribadi , tetapi juga digunakan untuk bidang pribadi .

Anda tidak dapat menggunakan metode privat atau bidang privat dalam kode di luar kelas yang mendeklarasikannya. Misalnya:

class Example {
    doSomething() {
        this.#method("from doSomething"); // <== Works
    }
    #method(str) {
        console.log("method called: " + str);
    }
}
const e = new Example();
e.doSomething();
e.#method(); // <=== FAILS
3 Mr.Alien Nov 23 2020 at 20:05

Ini adalah proposal eksperimental. Anda dapat menentukan metode Private JavaScript Menggunakan#

Untuk info lebih lanjut, Anda dapat merujuk ke dokumen MDN

Properti kelas bersifat publik secara default dan dapat diperiksa atau dimodifikasi di luar kelas. Namun ada proposal eksperimental untuk memungkinkan penentuan bidang kelas privat menggunakan #awalan hash .


Anda dapat mencapai sesuatu yang serupa menggunakan ES5 (hanya demi kesederhanaan untuk dijelaskan), di mana Anda dapat mensimulasikan sesuatu seperti metode Pribadi (yang secara native tidak dimiliki JavaScript).

Sebagai contoh:

function someObj() { //assuming this is a class definition
  function someMethod() { //private method which is not accessible outside someObj

  }

  function init() { //initializes some methods or code, private methods can be used here
    someMethod();
  }

  return {
    init //only exposes the init method outside
  }
}

Di atas, itu hanya akan mengekspos initmetode dari someObjyang dapat disebut sebagai someObj.init(), sedangkan Anda someMethodtidak akan dapat diakses di luar metode induknya.

Contoh:

someObj.init(); //works
someObj.someMethod(); //won't be accessible
1 Jondi Nov 23 2020 at 20:08

hash digunakan untuk menentukan bidang kelas privat