THÔNG DỤNG
OOP
ES6
ES(X)
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Cách tạo class trong Javascript (Hướng đối tượng OOP ES6)

Trong bài này chúng ta sẽ tìm hiểu về class trong Javascript, qua đó sẽ giúp bạn hiểu ...

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Class là một kỹ thuật trong lập trình dùng để cài đặt một đối tượng trong thực tế, qua đó ta có thể thêm các tính chất và hành động của đối tượng vào trong class, và chúng được thể hiện qua các thuộc tính và phương thức.

1. Class trong Javascript là gì?

Class trong javascript là một kỹ thuật giúp ta tạo ra các lớp mẫu chương trình để thể hiện cho các đối tượng. Qua đó, ta có thể thêm các hành động và thuộc tính của đối tượng vào trong lớp thông qua hai khái niệm thuộc tính và phương thức.

Ví dụ, đối tượng Sinh Viên sẽ có các đặc điểm như: Mã sinh viên, tên, tuổi, quê quán ... Và các hành động như: Thêm / xóa / sửa và thi cử.. Lúc này ta sẽ cài đặt đối tượng sinh viên này trong javascript thông qua class.

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

Thực tế thì bạn có thể sử dụng constructor function, nhưng thời điểm hiện tại thì người ta vẫn ưu tiên sử dụng class hơn, bởi nó thể hiện rõ kỹ thuật lập trình hướng đối tượng OOP trong ngôn ngữ này.

Cú pháp tạo class như sau:

class MyClass {
  // Hàm khởi tạo
  constructor() { ... }
  // Các phương thức
  method1() { ... }
  method2() { ... }
  method3() { ... }
  ...
}

Các thuộc tính sẽ được định nghĩa trong hàm khởi tạo constructor ngay bên trong class. Chúng ta sẽ tìm hiểu kỹ nó hơn trong bài viết private và protected trong js.

2. Khai báo thuộc tính cho class trong js

Để khai báo thuộc tính cho class thì chúng ta có hai cách. Thứ nhất là khai báo trong hàm khởi tạo constructor, thứ hai là khai báo trực tiếp.

Cách 1: Khai báo trong hàm constructor.

class User {
    constructor(){
        // Khai báo các thuộc tính
        this.name = '';
        this.age = '';
        this.address = '';
    }
}

Cách 2: Khai báo trực tiếp ngay bên trong class.

class User {
    name = ''
    age = ''
    address = ''
}

3. Khai báo phương thức cho class trong js

Trong class, khi tạo một phương thức thì bạn không cần sử dụng từ khóa function nhé. Tiếp theo là cú pháp tạo function như chúng ta đã học.

class User {
    // Định nghĩa phương thức showMessage
    showMessage(){
        console.log("Đây là nội dung tin nhắn");
    }
}

Sau đây là một ví dụ tổng hợp.

Ví dụ: Tạo một đối tượng User gồm thuộc tính name và một phương thức sayHi.

class User {

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

  sayHi() {
    alert(this.name);
  }

}

// Cách dùng:
let user = new User("Cường");
user.sayHi(); // Cường

Hàm constructor sẽ được khởi chạy mỗi khi bạn sử dụng từ khóa new để khởi tạo class. Vì vậy, thuộc tính name sẽ được bổ sung vào đối tượng this (this chính là đối tượng hiện tại).

Lưu ý: Bạn đừng nhầm lẫn class với object nhé.

  • Trong object, ta sẽ phải sử dụng dấu phẩy để ngăn cách giữa các thuộc tính hoặc phương thức.
  • Trong class, ta không cần sử dụng dấu phẩy

4. Các bước tạo class trong javascript

Để tạo một class thì bạn nên thực hiện theo các bước dưới đây:

  • Bước 1: Phân tích kỹ đối tượng sẽ có những phương thức nào, thuộc tính nào.
  • Bước 2: Cài đặt class trong js

Ví dụ: Xây dựng class Person với mục đích khai báo y tế trong mùa dịch Covid - 19.

Bước 1: Đối tượng này Person sẽ cần có tên, địa chỉ, số điện thoại, số căn cước. Ta sẽ có một hành động là khai báo y tế.

Bước 2: Cài đặt chương trình.

class Person{
    constructor(name, address, phone, cmnd){
        this.name = name;
        this.address = address;
        this.phone = phone;
        this.cmnd = cmnd;
    }
    
    khaibao(){
        return `Tôi tên là ${this.name}, đang sống tại ${this.address}, 
                số điện thoại ${this.phone}, số cmnd là ${this.cmnd}`;
    }
}

5. Dùng function để thay thế class trong javascript

Trong javascript, class là một function. Ta có thể kiểm tra bằng cách sử dụng từ khóa typeof.

class User {
  constructor(name) { this.name = name; }
  sayHi() { alert(this.name); }
}

// Xem User thuộc thể loại gì
console.log(typeof User); // function

Kết quả trả về sẽ là function. Vì vậy, sẽ có một đối tượng tên là User, trong đối tượng này sẽ có các prototype.

class User {
  constructor(name) { this.name = name; }
  sayHi() { alert(this.name); }
}

// class là một function
alert(typeof User); // function

// User chính là một constructor
alert(User === User.prototype.constructor); // true

// Phương thức sayHi cũng nằm trong prototype, e.g:
alert(User.prototype.sayHi); // the code of the sayHi method

// Xem danh sách các thuộc tính của User.prototype
alert(Object.getOwnPropertyNames(User.prototype)); // constructor, sayHi

Như vậy, ta có thể sử dụng function để khai báo class User thay thế cho đoạn code trên như sau:

function User(name) {
    this.name = name;
    this.sayHi = function () {
        alert(this.name);
    }
}

Để hiểu rõ hơn về vấn đề này thì bạn hãy xem thêm trong bài constructor function nhé.

6. Một vài biểu thức khác của class trong javascript

Ngoài cách sử dụng cơ bản như trên thì ta có thêm một vài biến thể khác nữa của class.

Giống như một function, bạn có thể khai báo class và gắn trực tiếp nó vào một biến như sau:

let User = class {
  sayHi() {
    alert("Hello");
  }
};

let user1 = new User();
user1.sayHi();

Trường hợp này bạn cũng có thể đặt một cái tên ảo cho class, và tên này chỉ được phép sử dụng bên trong class mà thôi.

let User = class TenClass{
  sayHi() {
    alert(TenClass);
  }
};

let user1 = new User();
user1.sayHi(); // Hiển thị nội dung của class

alert(TenClass); // Không tồn tại

Với hai cách dùng trên thì ta có thể tạo ra một cách dùng khá hay khác, đó là khởi tạo class trong một hàm và cho hàm đó return về chính class đó.

function makeClass(phrase) {
  // Định nghĩa class và return nó về
  return class {
    sayHi() {
      alert(phrase);
    }
  };
}

// Tạo một class
let User = makeClass("Hello");

new User().sayHi(); // Hello

Như vậy hàm makeClass sẽ có nhiệm vụ là khởi tạo một class theo ý mình.

7. Getters và setters của class trong javascript

Getters và setters là hai khái niệm khá hay trong lập trình oop, cụ thể như sau:

  • Getters là những hàm có nhiệm vụ lấy giá trị của thuộc tính
  • Setters là những hàm có nhiệm vụ thiết lập giá trị cho các thuộc tính

Javascript cung cấp hai từ khóa getset giúp ta định nghĩa hai loại phương thức này.

Ví dụ
class User {
    constructor(name) {
        // Tự động gọi đến hàm set name
        this.name = name;
    }

    get name() {
        return "Tên bạn là " + this._name;
    }

    set name(value) {
        if (value.length < 4) {
            alert("Vui lòng nhập tên dài hơn 4 kí tự");
            return;
        }
        this._name = value;
    }
}

let user = new User("Cường");
alert(user.name); // Tên bạn là Cường

user = new User(""); // Lỗi "Vui lòng nhập tên dài hơn 4 kí tự"

Trong hàm constructor mình đã thiết lập giá trị cho thuộc tính name như sau:

this.name = name

Lúc này javascript sẽ tự gọi đến phương thức set name, nên nếu bạn nhập ngắn hơn 4 ký tự thì sẽ bị thông báo lỗi.

Còn khi mình gọi đến thuộc tính của lớp alert(user.name); thì javascript sẽ tự động thêm vào dòng chữ "Tên của bạn là ...".

Lời kết: Như vậy là chúng ta đã tìm hiểu xong cách khởi tạo class trong javascript. Qua bày này thì ta thấy rằng javascript bây giờ đã là một ngôn ngữ theo hướng đối tượng, kết hợp với công dụng của nó trên nền web và server giúp js trở thành một ngôn ngữ tương lai. Nếu bạn là một lập trình viên mà bỏ qua ngôn ngữ này thì quả là một sai lầm.

Cùng chuyên mục:

Functional Programming là gì? Tại sao và khi nào bạn nên sử dụng trong JavaScript

Functional Programming là gì? Tại sao và khi nào bạn nên sử dụng trong JavaScript

Những tính năng mới trong ES6+ trong JavaScript

Những tính năng mới trong ES6+ trong JavaScript

4 cách tránh memory leaks trong JavaScript

4 cách tránh memory leaks trong JavaScript

Capturing và bubbling Event trong Javascript

Capturing và bubbling Event trong Javascript

Phân biệt prototype và __proto__ trong JavaScript

Phân biệt prototype và __proto__ trong JavaScript

Cách hoạt động của Event Loop trong JavaScript

Cách hoạt động của Event Loop trong JavaScript

Phương thức bind(), call(), và apply() trong JavaScript

Phương thức bind(), call(), và apply() trong JavaScript

Cách khắc phục lỗi

Cách khắc phục lỗi "hoisting" trong JavaScript

Sử dụng Promise.all và Promise.race để quản lý các Promise trong JavaScript

Sử dụng Promise.all và Promise.race để quản lý các Promise trong JavaScript

Xử lý bất đồng bộ bằng vòng lặp for-await trong JavaScript

Xử lý bất đồng bộ bằng vòng lặp for-await trong JavaScript

Sự khác biệt giữa Promise, Callback và Async/Await trong JavaScript

Sự khác biệt giữa Promise, Callback và Async/Await trong JavaScript

Cách sử dụng Async functions trong JavaScript

Cách sử dụng Async functions trong JavaScript

Hàm String isspace() trong Python

Hàm String isspace() trong Python

Cách tạo số ngẫu nhiên trong Javascript

Cách tạo số ngẫu nhiên trong Javascript

Hướng dẫn cách tạo một số ngẫu nhiên ...

Cách gộp hai object javascript lại với nhau

Cách gộp hai object javascript lại với nhau

Cách lấy chiều dài của object trong Javascript

Cách lấy chiều dài của object trong Javascript

Hướng dẫn giải phương trình bậc 1 bằng Javascript

Hướng dẫn giải phương trình bậc 1 bằng Javascript

Cách dùng nextSibling trong javascript

Cách dùng nextSibling trong javascript

Cách dùng insertAdjacentHTML trong javascript

Cách dùng insertAdjacentHTML trong javascript

Cách dùng innerHTML trong Javascript

Cách dùng innerHTML trong Javascript

Top