Để hiểu rõ về các hàm được đề cập trong bài viết này, các bạn nên ôn lại một chút kiến thức về đối tượng trong javascript và ass[this] trong javascript nhé. Như đã hẹn, trong bài này mình sẽ giới thiệu bộ 3 chức năng bind, call ,apply. Đây là 3 hàm tạo nên sự mạnh mẽ và bá đạo của JavaScript
Trói đít [cái này] reback by bind
Bind is an function in Function. nguyên mẫu, do đó chỉ có chức năng mới có khả năng gọi nó. Như đã nhắc đến trong bài viết về điều này, liên kết được sử dụng để xác định tham số này cho một chức năng
Như trong trường hợp bên dưới, khi ta truyền hàm showName vào như một lệnh gọi lại cho nút hàm. nhấp vào, giá trị này ở đây chính là nút đó. To function running true, ta used bind to bind the value person and this
Tệp này chứa văn bản Unicode hai chiều có thể được diễn giải hoặc biên dịch khác với nội dung hiển thị bên dưới. Để xem lại, hãy mở tệp trong trình chỉnh sửa hiển thị các ký tự Unicode bị ẩn
Tìm hiểu thêm về các ký tự Unicode hai chiều
Hiển thị ký tự ẩn
xem thô
được lưu trữ với ❤ bởi GitHub
Không chỉ liên kết được đánh giá này, liên kết mà còn liên kết được các tham số truyền vào cho hàm nữa. Do đó, Bind but used to write partial function
Nói một cách đơn giản, một phần chức năng tức là tạo ra 1 chức năng mới từ 1 chức năng cũ bằng cách gán một số tham số cho chức năng cũ đó. You please see ví dụ cụ thể sau. Mình có một log function đơn giản có 3 tham số
Tệp này chứa văn bản Unicode hai chiều có thể được diễn giải hoặc biên dịch khác với nội dung hiển thị bên dưới. Để xem lại, hãy mở tệp trong trình chỉnh sửa hiển thị các ký tự Unicode bị ẩn
Tìm hiểu thêm về các ký tự Unicode hai chiều
Hiển thị ký tự ẩn
xem thô
được lưu trữ với ❤ bởi GitHub
Giả sử mình muốn tạo một nhật ký hàm khác, ghi lại nhật ký lỗi hôm nay, mình có thể viết một hàm mới dựa trên nhật ký hàm cũ
Tệp này chứa văn bản Unicode hai chiều có thể được diễn giải hoặc biên dịch khác với nội dung hiển thị bên dưới. Để xem lại, hãy mở tệp trong trình chỉnh sửa hiển thị các ký tự Unicode bị ẩn
Tìm hiểu thêm về các ký tự Unicode hai chiều
Hiển thị ký tự ẩn
xem thô
được lưu trữ với ❤ bởi GitHub
Thay vì viết như thế, mình có thể viết đơn giản hơn bằng cách sử dụng ràng buộc. Ở đây log là hàm cũ, logErrToday là hàm mới, được tạo ra bằng cách gán mặc định 2 tham số mức và thời gian
Tệp này chứa văn bản Unicode hai chiều có thể được diễn giải hoặc biên dịch khác với nội dung hiển thị bên dưới. Để xem lại, hãy mở tệp trong trình chỉnh sửa hiển thị các ký tự Unicode bị ẩn
Tìm hiểu thêm về các ký tự Unicode hai chiều
Hiển thị ký tự ẩn
xem thô
được lưu trữ với ❤ bởi GitHub
Chức năng một phần còn được gọi là Cà ri [Người bảo 2 cái đó là một, nhiều người bảo 2 cái đấy khác nhau]. Nếu bạn thấy khái niệm một phần function/curry khá lạ tai đừng lo, chúng ít được sử dụng trong Java, C# mà hay được sử dụng khá nhiều trong một số ngôn ngữ kiểu lập trình hàm [lập trình chức năng] như Haskell, F#, Scala . . Lập trình hàm khá khó học, dễ vất vả đầu óc, bạn nào muốn thử sức thì cứ search ngôn ngữ Haskell mà phang nhé
Call và Apply, tuy 2 mà 1, thấy 1 mà 2
Đây là 1 cặp anh em… nhầm, chị em song sinh trong JavaScript. Hai hàm này nằm trong nguyên mẫu của Hàm [Hàm. nguyên mẫu], làm chức năng duy nhất mới có thể gọi đó. We có chung một chức năng lại. Gọi 1 hàm, xác định tham số này, truyền các tham số còn lại vào
Điểm khác nhau là áp dụng truyền vào một mảng chứa toàn bộ tham số còn gọi truyền lần lượt như từng tham số. Dễ nhớ, ta có thể thẩm định “A là một mảng, C là nhiều cục“
Cùng xem ví dụ đơn giản này về cuộc gọi và áp dụng, bạn sẽ hiểu ngay
Tệp này chứa văn bản Unicode hai chiều có thể được diễn giải hoặc biên dịch khác với nội dung hiển thị bên dưới. Để xem lại, hãy mở tệp trong trình chỉnh sửa hiển thị các ký tự Unicode bị ẩn
Tìm hiểu thêm về các ký tự Unicode hai chiều
Hiển thị ký tự ẩn
xem thô
được lưu trữ với ❤ bởi GitHub
Call and apply normal used to rip function [hàm mượn]. Các bạn thử đọc xem dòng code dưới đây làm gì?
Tệp này chứa văn bản Unicode hai chiều có thể được diễn giải hoặc biên dịch khác với nội dung hiển thị bên dưới. Để xem lại, hãy mở tệp trong trình chỉnh sửa hiển thị các ký tự Unicode bị ẩn
Tìm hiểu thêm về các ký tự Unicode hai chiều
Hiển thị ký tự ẩn
xem thô
được lưu trữ với ❤ bởi GitHub
Gợi ý. Đối số là một biến cục bộ trong hàm, chứa toàn bộ các tham số được truyền vào
câu trả lời. Đối số là một đối tượng giống như mảng nhưng không phải là mảng [đấy, thấy chưa]. Các đối số giống mảng vì nó có độ dài trường, có thể truy cập các giá trị mà nó chứa thông tin qua chỉ số 0,1,2. Tuy nhiên, đối số không phải là mảng nên nó không thể gọi các hàm của mảng. nguyên mẫu
Do đó, ta phải sử dụng gọi/áp dụng để thuê một số hàm trong Mảng. nguyên mẫu, các hàm này sẽ trả về một mảng để ta xử lý. Dòng mã phía trên chuyển đối tượng đối số thành một mảng. Sao rắc rối quá vậy?? . Hồi mới biết cãi thằng này mình cũng muốn chửi thề như vậy đấy
Ngoài ra, gọi và áp dụng còn được sử dụng để sửa khỉ hoặc tạo gián điệp. Ta có thể mở rộng chức năng của một hàm mà không cần sửa mã nguồn của hàm đó. Ví dụ ta có chức năng truy cậpWeb của đối tượng máy tính
Tệp này chứa văn bản Unicode hai chiều có thể được diễn giải hoặc biên dịch khác với nội dung hiển thị bên dưới. Để xem lại, hãy mở tệp trong trình chỉnh sửa hiển thị các ký tự Unicode bị ẩn
Tìm hiểu thêm về các ký tự Unicode hai chiều
Hiển thị ký tự ẩn
xem thô
được lưu trữ với ❤ bởi GitHub
Sử dụng cuộc gọi, ta có thể ghi thêm nhật ký trước và sau khi hàm accessWeb được gọi mà không thể nhập vào mã của hàm đó
Tệp này chứa văn bản Unicode hai chiều có thể được diễn giải hoặc biên dịch khác với nội dung hiển thị bên dưới. Để xem lại, hãy mở tệp trong trình chỉnh sửa hiển thị các ký tự Unicode bị ẩn
Tìm hiểu thêm về các ký tự Unicode hai chiều
Hiển thị ký tự ẩn
xem thô
được lưu trữ với ❤ bởi GitHub
Nói nhỏ các bạn nghe nè, mấy cái call/apply với bind này cũng ít người, làm vậy các bạn đọc xong bài này có thể lấy kiến thức ra để lòe thiên hạ. Vì ít người biết nên nếu viết code mà dùng call, apply v…v bạn nhớ giải thích rõ nhé, viết code khó hiểu dễ bị ăn lắm [Nói thật đấy, ngày xưa code Array. kêu gì mà làm mình khó hiểu, đau cả đầu nên phải lôi cả bọn nhà thằng mã ra mà phán]