Trong JavaScript, Binding là quá trình liên kết định nghĩa hàm chính xác với lệnh gọi hàm hoặc liên kết giá trị với biến. Một địa chỉ bộ nhớ được gán cho mỗi định nghĩa chức năng ở giai đoạn biên dịch. Khi một chức năng cụ thể được gọi, việc thực thi chương trình sẽ chuyển điều khiển đến địa chỉ bộ nhớ cụ thể đó và tìm nạp mã chức năng được lưu trữ tại vị trí được thực thi. Cơ chế này được gọi là ràng buộc
Ràng buộc trong JavaScript được chia thành hai loại. “Ràng buộc tĩnh” và “Ràng buộc động”. Nếu tất cả các thông tin cần thiết liên quan đến lệnh gọi hàm và gán biến đã được biết tại thời điểm biên dịch, thì nó được gọi là Liên kết tĩnh. Trong trường hợp khác, Liên kết động xảy ra khi thông tin bắt buộc được xác nhận trong thời gian chạy
Bài viết này sẽ giải thích Liên kết tĩnh và Liên kết động trong JavaScript với sự trợ giúp của các ví dụ thích hợp. Vì vậy, hãy bắt đầu
Liên kết tĩnh trong JavaScript
"Ràng buộc tĩnh" của JavaScript xảy ra khi trình biên dịch nhận ra tất cả thông tin bắt buộc liên quan đến việc gán giá trị cho biến hoặc gọi hàm, ở giai đoạn biên dịch. Nó còn được gọi là "Ràng buộc thời gian biên dịch" hoặc "Ràng buộc sớm"
Kỹ thuật liên kết tĩnh của JavaScript được triển khai trong quá trình mã hóa, giúp chương trình hiệu quả hơn vì tất cả các giá trị biến và lệnh gọi hàm được xác định trước trong loại liên kết này. Tuy nhiên, nó cũng ảnh hưởng đến tính linh hoạt của mã
Một số ví dụ về thủ tục Static Binding là. “Quá tải toán tử” và “Quá tải chức năng”
Bây giờ, hãy xem cách Liên kết tĩnh hoạt động đằng sau Quá tải toán tử và Quá tải hàm trong JavaScript
Quá tải toán tử với liên kết tĩnh trong JavaScript
JavaScript cho phép chúng tôi xác định lại cách toán tử hoạt động đối với các loại do người dùng xác định khác nhau, chẳng hạn như cấu trúc và đối tượng. Chức năng này được gọi là Quá tải toán tử
Thí dụ. Quá tải toán tử với liên kết tĩnh trong JavaScript
Vì quá tải toán tử cung cấp chức năng thay đổi hành vi của toán tử đã chỉ định tại thời điểm biên dịch, chúng tôi sẽ sử dụng chức năng này để xác định lại hành vi của toán tử “+”
Chẳng hạn, bạn có thể sử dụng toán tử “+” để cộng hai số
3 + 6
Hoặc để nối các chuỗi
'linux' + ' ' + 'gợi ý
Hoặc để nối các số với các chuỗi
1 + ' bài viết'
đầu ra
Tại thời điểm biên dịch, Toán tử “+” bị quá tải dựa trên loại dữ liệu chúng tôi đã sử dụng. Chẳng hạn, “3” + “6” tạo ra một số mới “9”, trong khi đó, “1” + “article” tạo ra chuỗi “1 article”. Đó là cách chúng tôi đã triển khai quá tải toán tử với sự trợ giúp của liên kết tĩnh
Nạp chồng hàm với Static Binding trong JavaScript
Nạp chồng hàm là một ví dụ khác về liên kết tĩnh trong đó nhiều hàm được định nghĩa có cùng tên nhưng có các tham số khác nhau. Lời gọi hàm liên kết chính nó với đúng chức năng dựa trên các đối số đã truyền tại thời điểm biên dịch
ví dụ 1. Nạp chồng hàm với Static Binding trong JavaScript
Trong Nạp chồng hàm, các phương thức được thêm vào có thể có cùng tên, nhưng để nạp chồng chúng, bạn phải truyền các đối số khác nhau, thay đổi kết quả tương ứng
Chẳng hạn, chúng ta đã tạo hai hàm có cùng tên. Hàm “show[]” đầu tiên chấp nhận hai đối số, “x” và “y” và nó trả về tổng của chúng
chức năng hiển thị [ x ,y] {
return x+y;
}
Hàm “show[]” thứ hai sẽ chấp nhận và trả về đối số “z” đã truyền
chức năng hiển thị [ z ] {
return z;
}
Bây giờ, khi chúng ta chuyển các giá trị “3” và “5” làm đối số, lệnh gọi hàm “show[3,5]” sẽ liên kết chính nó với hàm show[] đầu tiên, hàm chấp nhận có hai tham số, trong khi khi một đối số được chỉ định,
hiển thị [3,5];
đầu ra
hiển thị [2];
đầu ra
Trong ví dụ nêu trên, cả hai hàm “show[]” được thêm vào đều bị ràng buộc về mặt thống kê tại thời điểm biên dịch. Kết quả là, sẽ không lãng phí thời gian để xác định chức năng nào cần gọi, dẫn đến việc thực thi chương trình nhanh chóng và hiệu quả
Bây giờ chúng ta sẽ tiếp tục và thảo luận về Dynamic Binding trong JavaScript
Liên kết động trong JavaScript
“Dynamic Binding” trong JavaScript là quá trình gán giá trị cho một biến hoặc gọi một hàm trong thời gian chạy. Nó còn được gọi là "Ràng buộc thời gian chạy" hoặc "Liên kết muộn" vì ràng buộc hàm gọi đến đúng hàm hoặc gán giá trị cho các biến tương ứng bị trì hoãn cho đến khi thời gian chạy
Liên kết động cho phép chương trình linh hoạt hơn bằng cách cho phép người dùng chọn chức năng nào sẽ được gọi và giá trị nào để gán cho một biến tại thời điểm thực hiện. Tuy nhiên, nó làm chậm quá trình thực thi vì tất cả thông tin đã chỉ định được gửi vào thời gian chạy
“Ghi đè phương thức” là một ví dụ tuyệt vời về việc sử dụng Liên kết động trong JavaScript
Ghi đè phương thức với Dynamic Binding trong JavaScript
Trong JavaScript, Ghi đè phương thức là một cơ chế cho phép một lớp con triển khai phương thức của lớp cha theo một cách khác. Theo cách này, lớp con sẽ ghi đè phương thức của lớp cha với sự trợ giúp của liên kết động
Thí dụ. Ghi đè phương thức với Dynamic Binding trong JavaScript
Trong ví dụ này, chúng ta sẽ ghi đè phương thức “speak[]” của lớp “Birds” [cha]. Với mục đích này, chúng ta sẽ định nghĩa thêm hai phương thức “speak[]”, thứ nhất trong lớp “Cú” và thứ hai trong lớp “Pigeon”, sau đó gọi phương thức “speak[]” của cả hai lớp con này
lớp Chim {
biết nói [] {
console.log["Các loài chim có âm thanh khác nhau"];
}
}
class Owl extends Birds {
speak[] {
console.log["Cú kêu Screeeeee"];
}
}
class Pigeon extends Birds {
speak[] {
console.log["Chim bồ câu kêu coo COO coo"];
}
}
const owl = new Owl[];
const pigeon = new Pigeon[];
owl.nói[];
chim bồ câu. nói[];
Có thể thấy từ đầu ra bên dưới, phương thức speak[] của lớp Birds bị các lớp con của nó ghi đè do Liên kết động
Đó là tất cả về Static vs Dynamic Binding trong JavaScript. Bạn có thể khám phá thêm chủ đề này theo yêu cầu của bạn
Sự kết luận
Liên kết tĩnh trong JavaScript xảy ra khi trình biên dịch nhận ra tất cả thông tin cần thiết liên quan đến việc gán giá trị biến hoặc gọi hàm ở giai đoạn biên dịch, trong khi Liên kết động đang gán giá trị cho biến hoặc gọi giá trị gọi hàm khi chạy- . Nạp chồng hàm và nạp chồng toán tử dựa trên Liên kết tĩnh và Ghi đè phương thức được coi là một ví dụ về Liên kết động. Bài viết này đã thảo luận về Liên kết tĩnh và Liên kết động trong JavaScript với sự trợ giúp của các ví dụ phù hợp