Biểu tượng `#` làm gì trong JavaScript?

Nov 23 2020

Tôi đã gặp mã có chứa #dấu hiệu. Cái này được dùng để làm gì? Mã trông giống như sau:

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

Trả lời

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

Đó là một dấu hiệu (chứ không phải một toán tử) cho biết rằng thành viên là riêng tư - trong trường hợp này, một phương thức riêng tư , nhưng nó cũng được sử dụng cho các trường riêng tư .

Bạn không thể sử dụng phương thức riêng hoặc trường riêng trong mã bên ngoài lớp khai báo chúng. Ví dụ:

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 13:05

Đây là một đề xuất thử nghiệm. Bạn có thể xác định các phương pháp JavaScript riêng bằng cách sử dụng#

Để biết thêm thông tin, bạn có thể tham khảo tài liệu MDN

Các thuộc tính của lớp là công khai theo mặc định và có thể được kiểm tra hoặc sửa đổi bên ngoài lớp. Tuy nhiên, có một đề xuất thử nghiệm để cho phép xác định các trường lớp riêng bằng cách sử dụng #tiền tố băm .


Bạn có thể đạt được điều gì đó tương tự bằng cách sử dụng ES5 (chỉ vì mục đích đơn giản để giải thích), nơi bạn có thể mô phỏng một cái gì đó giống như các phương thức Riêng tư (mà JavaScript nguyên bản không có).

Ví dụ:

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
  }
}

Ở phần trên, nó sẽ chỉ hiển thị initphương thức mà từ someObjđó có thể được gọi là someObj.init(), trong khi của bạn someMethodsẽ không thể truy cập được bên ngoài phương thức mẹ của nó.

Thí dụ:

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

băm được sử dụng để xác định các trường lớp riêng tư