Trong bài này chúng ta sẽ tìm hiểu ba cấp độ truy cập đến thuộc tính và phương thức của class trong javascript, đó là cấp độ private / protected / public.

Qua bài này bạn sẽ hiểu và biết khi nào thì nên sử dụng private, khi nao thì sử dụng protected và khi nào thì sử dụng public. Đây là kiến thức quan trọng trong lập trình hướng đối tượng, vì nó giúp đảm bảo dữ liệu trong các đối tượng được an toàn.

1. Private / protected và public trong javascript là gì?

Private / protected và public là ba mức độ truy cập đến các thuộc tính và phương thức trong class. Nó giúp ta bảo vệ được dữ liệu bên trong các class, chỉ chia sẻ những dữ liệu cần thiết, hoặc cho phép chia sẻ đến các lớp con kế thừa từ nó.

Private là cấp độ bảo mật nhất, nó chỉ cho phép sử dụng bên trong class, còn bên ngoài không truy cập được.

Bài viết này được đăng tại [free tuts .net]

Protected là cấp độ bảo mật thứ hai, nó chỉ cho phép sử dụng bên trong class và cả class kế thừa. Bên ngoài không truy cập được.

Mưc này thì rất khó cài đặt, bởi bản thân Javascript không hỗ trợ. Vì vậy, ta sẽ sử dụng getter và setter để tạo ra một thuộc tính protected.

Public thì khác, bạn có thể truy cập ở bất kì đâu. Đây là mức dễ dàng nhất.

Xem Thêm:   Hàm SUBSTITUTE() trong Excel

Bây giờ chúng ta sẽ tìm hiểu từng loại một cách cụ thể hơn nhé.

2. Cấp độ public trong Javascript

Public là cấp độ lỏng lẻo nhất. Các thuộc tính và phương thức đều có thể truy cập được dù ở bên trong lớp hay bên ngoài lớp.

class Human{
    name = ""
    sayHi(){
        // this.name là truy cập trong lớp
        console.log(`Xin chào, tôi là ${this.name}`);
    }
}

let cuong = new Human();

// Truy cập ngoài lớp
cuong.name = "Cường";
cuong.sayHi();

Những ví dụ mà từ trước đến giờ các bạn đã học đều thuộc dạng public.

3. Cấp độ protected trong Javascript

Cấp độ protected thì khác, bạn chỉ được phép truy cập ở bên trong lớp đó và cả bên trong lớp kế thừa.

Vì javascript không hỗ tợ cấp độ này, vì vậy ta phải kết hợp một mẹo khá đơn giản.

  • Đặt quy ước cho protected là thuộc tính sẽ bắt đầu bằng dấu gạch dưới _. Theo quy ước thì khi sử dụng thuộc tính thì bạn phải bỏ đi dấu gạch dưới.
  • Ta sẽ tạo một getter, nhưng không tạo setter, để ở bên ngoài class có sử dụng setter thì sẽ không có tác dụng.

Quy ước: Để khai báo protected thì ta đặt dấu gạch dưới đằng trước thuộc tính và phương thức.

class className{
    
    // _name là protected
    _name = "Cường"
    
    // sayHi là protected
    _sayHi(){
        // code
    }
}       

Ví dụ: Tạo hai class Human và Student để demo cho protected.

class Human {
    _name;

    constructor(name) {
        this._name = name;
    }

    get name() {
        return this._name;
    }
    
    sayHi(){
        console.log(`Xin chào, tôi là ${this._name}`);
    }
}

let h = new Human("Cường");
h.sayHi(); // Tôi là Cường
h.name = "Nguyễn";
h.sayHi(); // Tôi là Cường

Như bạn thấy, mặc dù mình đã thiết lập giá trị mới cho h.name nhưng vẫn không có tác dụng.

Xem Thêm:   Ruby là gì? Ai đã sáng tạo ra ngôn ngữ viêm kim cương này?

Nhưng nếu bạn cố tình thiết lập như thế này h._name = "Nguyễn"; thì sẽ có tác dụng đấy nhé. Vì vậy, đây chỉ là một quy ước chung mà thôi.

4. Cập độ private trong Javascript

Private là cấp độ bảo mật cao nhất, nó chỉ cho phép sử dụng bên trong lớp mà thôi. Ngay cả lớp kế thừa cũng không đươc phép sử dụng.

Để khai báo một thuộc tính là private thì ta thêm dấu thăng đằng trước.

class className{
    #protected_property = ""
    
    #protected_method(){
        
    }
}   

Cấp độ này chỉ xuất hiện từ ES9.

Ví dụ: thuộc tính #name là private nên không được phép sử dụng ở bên ngoài, ngay cả lớp kế thừa Student cũng không được phép.

class Human{
    // Protected
    #name = ""
    
    constructor(name){
        // Lệnh này đúng, vì nó là lớp con 
        // nên được phép truy cập đến thuộc tính private
        this.#name = name;
    }
    
    // Public
    sayHi(){
        // Lệnh này đúng, vì đang truy cập trong lớp
        console.log(`Xin chào, tôi là ${this.#name}`);
    }
}

class Student extends Human{
    sayGoodbye(){
        // Lệnh này sai, vì #name là private
        console.log(`${this.#name} tạm biệt mọi người nhé`);
    }
}

let cuong = new Student("Cường");


cuong.sayHi();  // Lệnh này đúng
cuong.#name;    // Lệnh này sai

Lời kết: Như vậy là chúng ta đã tìm hiểu xong 3 cấp độ truy cập trong javascript, đó là protected / private và public. Qua bài này thì ta thấy javascipt đang dần hoàn thiện theo thời gian để trở thành ngôn ngữ lập trình cấp cao.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *