Hướng dẫn dùng binds. trong PHP

Phương thức bind[] trả về một hàm mới, khi được gọi, nó có giá trị this được đặt thành một giá trị cụ thể.

Sau đây minh họa cú pháp của phương thức bind[]:


// Cú pháp phương thức bind[]

fn.bind[thisArg[, arg1[, arg2[, ...]]]]

Trong cú pháp này, phương thức bind[] trả về một bản sao của hàm fn với giá trị cụ thể this [thisArg] và các đối số [arg1, arg2,…].

Sử dụng bind[] để liên kết hàm [function binding]

Khi bạn truyền một phương thức, một đối tượng đến một hàm khác dưới dạng callback, thì this sẽ bị mất. Ví dụ:

setTimeout[sinhVien.getTen, 1000];

Kết quả:

Như bạn có thể thấy rõ ràng là sinhVien.getTen trả về bind[]0 mà không phải là bind[]1 như chúng ta mong đợi.

Trong trường hợp này, câu lệnh:


setTimeout[sinhVien.getTen, 1000];

được JavaScript Engine hiểu là:

setTimeout[f, 1000]; // Mất sinhVien context

Hàm this bên trong hàm bind[]3 được đặt thành đối tượng toàn cục ở chế độ không nghiêm ngặt [non-strict mode] và undefined trong chế độ nghiêm ngặt [strict mode].

Để tránh trường hợp này, bạn có thể bọc lệnh gọi đến phương thức sinhVien.getTen trong một hàm ẩn danh [anonymous function], như sau:

Cách này sẽ hoạt động đúng mong đợi vì nó lấy bind[]5 từ phạm vi bên ngoài và sau đó gọi phương thức bind[]6.

Hoặc bạn có thể sử dụng phương thức bind[] mà JS cung cấp:

let f = sinhVien.getTen.bind[sinhVien];

Chúng ta có thể hiểu thế này:

  • Dòng lệnh đầu tiên sẽ liên kết sinhVien.getTen đến đối tượng bind[]5 sau đó gán vào bind[]9

  • Thứ hai, chuyển hàm ràng buộc bind[]9 với giá trị this đã được đặt cho đối tượng bind[]5 vào hàm bind[]3.

Sử dụng phương thức bind[] để mượn phương thức từ đối tượng khác

Đầu tiên, giả sử bạn có một đối tượng bind[]4, có phương thức bind[]5:

        console.log[this.ten + ' chạy được ' + tocDo + ' m/s.'];

Và một đối tượng bind[]6 có phương thức bind[]7:

        console.log[this.ten + ' bay được ' + tocDo + ' m/s.'];

Bây giờ, nếu bạn muốn liên kết đối tượng bind[]6 với phương thức bind[]5, bạn có thể sử dụng phương thức bind[] để tạo phương thức bind[]5 với this được thiết lập thành đối tượng bind[]6.


// Mượn phương thức chay[]

// trong đối tượng vanDongVien

let chay = vanDongVien.chay.bind[chim, 0.5];

Trong câu lệnh trên:

  • Gọi phương thức bind[] của phương thức this5 và truyền vào đối tượng bind[]6 làm đối số đầu tiên và this7 là đối số thứ hai.

Kết quả ta được:


Chim chích chạy được 0.5 m/s.

Như vậy, chúng ta đã mượn thành công phương thức this8 của đối tượng bind[]4.

Khả năng mượn một phương thức của một đối tượng mà không cần tạo bản sao của phương thức đó và duy trì nó ở hai nơi riêng biệt là tính năng rất mạnh trong JavaScript.

Nắm được tính năng này sẽ giúp ích cho bạn rất nhiều khi học nâng cao lên front end Framework như React, Angular...

> Đăng ký ngay KHÓA HỌC FRONT END [với ReactJS] nếu bạn muốn đi chuyên sâu với ngôn ngữ JavaScript.

Tổng kết về bind[] trong JS

Như vậy, trong bài hướng dẫn này, mình đã giúp bạn tìm hiểu về phương thức bind[] trong JavaScript, biết được bind[] là gì, sử dụng nó như thế nào...

Túm lại:

  • Phương thức bind[] trả về một hàm mới, khi gọi, this sẽ được chỉ định cụ thể

  • Phương thức bind[] cũng giúp mượn phương thức, mượn hàm [function borring] từ một đối tượng khác mà không cần nhân bản nó.

Bạn đã hiểu về phương thức bind[] trong JS chưa? Hãy để lại bình luận nếu có chỗ nào chưa hiểu bạn nhé.

Chúc bạn học tốt!

---

HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI

Học Lập trình chất lượng cao [Since 2002]. Học thực tế + Tuyển dụng ngay!

Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội

SĐT: 02435574074 - 0968051561

Email: hello@niithanoi.edu.vn

Fanpage: //facebook.com/NIIT.ICT/

#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #java #php #python

Chủ Đề