Hướng dẫn what is difference between call apply and bind in javascript? - sự khác biệt giữa call apply và bind trong javascript là gì?

Gọi áp dụng và ràng buộc. Và làm thế nào chúng khác nhau.

Hãy tìm hiểu cuộc gọi và áp dụng bằng cách sử dụng bất kỳ thuật ngữ hàng ngày.

Bạn có ba ô tô your_scooter , your_car and your_jet bắt đầu với cùng một cơ chế (phương thức). Chúng tôi đã tạo một đối tượng automobile với một phương thức push_button_engineStart.

var your_scooter, your_car, your_jet;
var automobile = {
        push_button_engineStart: function (runtime){
        console.log(this.name + "'s" + ' engine_started, buckle up for the ride for ' + runtime + " minutes");
    }
}

Hãy hiểu khi nào được gọi và áp dụng được sử dụng. Giả sử rằng bạn là một kỹ sư và bạn có your_scooter, your_caryour_jet không đi kèm với PUSP_BUTTON_ENGINE_START và bạn muốn sử dụng bên thứ ba push_button_engineStart.

Nếu bạn chạy các dòng mã sau, chúng sẽ gây ra lỗi. TẠI SAO?

//your_scooter.push_button_engineStart();
//your_car.push_button_engineStart();
//your_jet.push_button_engineStart();


automobile.push_button_engineStart.apply(your_scooter,[20]);
automobile.push_button_engineStart.call(your_jet,10);
automobile.push_button_engineStart.call(your_car,40);

Vì vậy, ví dụ trên là thành công cung cấp cho bạn_scooter, your_car, your_jet một tính năng từ đối tượng ô tô.

Hãy lặn sâu hơn ở đây, chúng tôi sẽ phân chia dòng mã trên.

//your_scooter.push_button_engineStart();
//your_car.push_button_engineStart();
//your_jet.push_button_engineStart();


automobile.push_button_engineStart.apply(your_scooter,[20]);
automobile.push_button_engineStart.call(your_jet,10);
automobile.push_button_engineStart.call(your_car,40);
0 đang giúp chúng tôi có được phương pháp đang được sử dụng. Here we will split the above line of code.
//your_scooter.push_button_engineStart();
//your_car.push_button_engineStart();
//your_jet.push_button_engineStart();


automobile.push_button_engineStart.apply(your_scooter,[20]);
automobile.push_button_engineStart.call(your_jet,10);
automobile.push_button_engineStart.call(your_car,40);
0 is helping us to get the method being used.

Hơn nữa, chúng tôi sử dụng áp dụng hoặc gọi bằng cách sử dụng ký hiệu dấu chấm.

//your_scooter.push_button_engineStart();
//your_car.push_button_engineStart();
//your_jet.push_button_engineStart();


automobile.push_button_engineStart.apply(your_scooter,[20]);
automobile.push_button_engineStart.call(your_jet,10);
automobile.push_button_engineStart.call(your_car,40);
1

Bây giờ áp dụng và gọi chấp nhận hai tham số.

  1. định nghĩa bài văn
  2. tranh luận

Vì vậy, ở đây chúng tôi đặt bối cảnh trong dòng mã cuối cùng.

//your_scooter.push_button_engineStart();
//your_car.push_button_engineStart();
//your_jet.push_button_engineStart();


automobile.push_button_engineStart.apply(your_scooter,[20]);
automobile.push_button_engineStart.call(your_jet,10);
automobile.push_button_engineStart.call(your_car,40);
2

Sự khác biệt giữa cuộc gọi và áp dụng chỉ là áp dụng các tham số chấp nhận dưới dạng một mảng trong khi cuộc gọi chỉ đơn giản là có thể chấp nhận danh sách các đối số được phân tách bằng dấu phẩy. is just that apply accepts parameters in the form of an array while call simply can accept a comma separated list of arguments.

Chức năng liên kết JS là gì?

Một hàm liên kết về cơ bản là liên kết bối cảnh của một cái gì đó và sau đó lưu trữ nó thành một biến để thực hiện ở giai đoạn sau.

Hãy làm cho ví dụ trước của chúng tôi thậm chí còn tốt hơn. Trước đó, chúng tôi đã sử dụng một phương pháp thuộc đối tượng ô tô và sử dụng nó để trang bị

//your_scooter.push_button_engineStart();
//your_car.push_button_engineStart();
//your_jet.push_button_engineStart();


automobile.push_button_engineStart.apply(your_scooter,[20]);
automobile.push_button_engineStart.call(your_jet,10);
automobile.push_button_engineStart.call(your_car,40);
3. Bây giờ hãy tưởng tượng chúng tôi muốn cung cấp riêng biệt push_button_engineStart riêng biệt để bắt đầu ô tô của chúng tôi riêng lẻ ở bất kỳ giai đoạn thực hiện nào sau đó mà chúng tôi mong muốn.

var scooty_engineStart = automobile.push_button_engineStart.bind(your_scooter);
var car_engineStart = automobile.push_button_engineStart.bind(your_car);
var jet_engineStart = automobile.push_button_engineStart.bind(your_jet);


setTimeout(scooty_engineStart,5000,30);
setTimeout(car_engineStart,10000,40);
setTimeout(jet_engineStart,15000,5);

Vẫn không hài lòng?

Hãy làm cho nó rõ ràng như giọt nước mắt. Thời gian để thử nghiệm. Chúng tôi sẽ quay lại để gọi và áp dụng ứng dụng chức năng và thử lưu trữ giá trị của hàm làm tài liệu tham khảo.

Thử nghiệm dưới đây không thành công vì cuộc gọi và áp dụng được gọi ngay lập tức, do đó, chúng tôi không bao giờ đến giai đoạn lưu trữ một tham chiếu trong một biến, nơi chức năng liên kết đánh cắp chương trình

//your_scooter.push_button_engineStart();
//your_car.push_button_engineStart();
//your_jet.push_button_engineStart();


automobile.push_button_engineStart.apply(your_scooter,[20]);
automobile.push_button_engineStart.call(your_jet,10);
automobile.push_button_engineStart.call(your_car,40);
5

Hướng dẫn what is difference between call apply and bind in javascript? - sự khác biệt giữa call apply và bind trong javascript là gì?

Trong JavaScript định hướng đối tượng, mọi thứ đều là một đối tượng và do đó chúng ta có thể đặt và truy cập các thuộc tính bổ sung vào các hàm và phương thức thông qua nguyên mẫu

CALL (): Phương thức Call () gọi một hàm có giá trị 'này' đã cho 'được cung cấp từng cái một. Điều này có nghĩa là chúng ta có thể gọi bất kỳ chức năng nào và chỉ định rõ ràng những gì 'điều này' nên tham chiếu trong hàm gọi.: The call() method invokes a function with a given 'this' value and arguments provided one by one. This means that we can call any function, and explicitly specify what 'this' should reference within the calling function.

Hướng dẫn what is difference between call apply and bind in javascript? - sự khác biệt giữa call apply và bind trong javascript là gì?

Ứng dụng (): gọi hàm và cho phép bạn vượt qua các đối số dưới dạng mảng.: Invokes the function and allows you to pass in arguments as an array.

Hướng dẫn what is difference between call apply and bind in javascript? - sự khác biệt giữa call apply và bind trong javascript là gì?

BIND (): Trả về một hàm mới, cho phép bạn chuyển trong một mảng và bất kỳ số lượng đối số nào.: returns a new function, allowing you to pass in an array and any number of arguments.

Hướng dẫn what is difference between call apply and bind in javascript? - sự khác biệt giữa call apply và bind trong javascript là gì?

Khi chúng ta sử dụng phương thức BIND ():

1. Động cơ JS đang tạo một phiên bản mời mới và ràng buộc Friend1 và Friend2 là biến 'này' của nó. Vì vậy, về cơ bản, nó sao chép chức năng mời.

2. Sau khi tạo một bản sao của hàm mời, nó có thể gọi Invitefriend1 () và Invitefriend2 (), mặc dù ban đầu nó không phải là trên đối tượng Friend1 và Friend2. Bây giờ nó sẽ nhận ra các thuộc tính của nó và các phương pháp của nó.

Gọi và áp dụng là khá nhiều hoán đổi cho nhau. Cả hai thực thi chức năng hiện tại ngay lập tức. Bạn cần quyết định xem nó có dễ dàng hơn để gửi một mảng hay danh sách các đối số được phân tách bằng dấu phẩy hay không. Trong khi BIND tạo ra một hàm mới sẽ có được đặt thành tham số đầu tiên được truyền cho Bind ().

Cảm ơn!