Liên kết javascript là gì?

Để 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

Liên kết javascript là gì?

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





var person = {firstName: 'Hoàng',Họ . 'Pham',showName . chức năng() {bảng điều khiển . .nhật ký(này. tên + ' ' + . .Họ);}} . ;//showName truyền vào như callback, ở đây this chính là button$('button').nhấp chuột(người. showName);// Sử dụng ràng buộc để xác định giá trị này< . $('button').nhấp chuột(người. showName. ràng buộc(người)); //this ở đây vẫn là object person

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





chức năng log(cấp độ, time, message) {console.log(cấp độ + ' . ' + time + ': ' + thông báo);}

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





chức năng log(cấp độ, time, message) {console.log(cấp độ + ' . ' + time + ': ' + thông báo); . "function logErrToday(message) {log("Error", "Today", message);}logErrToday("Server die."); // Lỗi – Hôm nay. Máy chủ chết.

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





chức năng log(cấp độ, time, message) {console.log(cấp độ + ' . ' + time + ': ' + thông báo); . // Không có this nên set this là null// Set mặc định 2 tham số level và timevar logErrToday = log.ràng buộc(null, ' . '), 'Today');// Hàm này tương ứng với log('Error', 'Today', 'Server die.')logErrToday("Máy chủ chết. ");// Lỗi – Hôm nay. Máy chủ chết.

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“

Liên kết javascript là gì?

Liên kết javascript là gì?

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





// Find max by way call function Math. tối đaToán. tối đa(4, 3 . max, ta could used call, 2, 10);// Thay vì gọi trực tiếp hàm Math.max, ta có thể dùng call// Đặt giá trị này bằng nullMath. tối đa. gọi(null, 4 . , 3, 2, 10);// Apply tương tự call, nhưng không truyền lần lượt// Mà truyền một array chứa toàn bộ các tham sốMath.tối đa. áp dụng(null, [4, 3, 2, 10]);

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





hàm kiểm tra(firstParam, secondParam, thirdParam){var args = Array.áp dụng(null, đối số . );console.log(args);}test(1, 2, 3); // [1, 2, 3]

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

Liên kết javascript là gì?

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





var máy tính = {truy cập Web : chức năng(trang web) { . // Đi tới site nào đóconsole.log ('Đi tới. ' + trang web); . };computer.truy cập Web('thiend*a. com'); //Đi tới. thiend*a. com

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





var máy tính = {truy cập Web : chức năng(trang web) { . // Đi tới site nào đóconsole.log ('Đi tới. ' + trang web); . };var oldFunction = computer.accessWeb;// Tráo hàm accessWeb bằng hàm mớimáy tính.truy cập Web = chức năng() . {console.log('Con gà bắt đầu vào web');oldFunction.áp dụng(đối số này, . ); // giữ nguyên hàm cũconsole.log('Con gà đã vào web');}computer.truy cập Web('thiend*a. com');// Con gà bắt đầu vào web// . thiend*a. com// Con gà đã vào web

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)