Gọi áp dụng và ràng buộc. và chúng khác nhau như thế nào
Hãy học gọi và áp dụng bất kỳ thuật ngữ hàng ngày.
Bạn có ba chiếc ô tô your_scooter , your_car and your_jet
bắt đầu với cùng một cơ chế (phương pháp). Chúng tôi tạo ra 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 cuộ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_car
và your_jet
điều đó không đi kèm với Push_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ẽ báo 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 mang lại cho your_scooter, your_car, your_jet một tính năng từ đối tượng ô tô.
Chúng ta hãy đi sâu hơn
Ở đây chúng ta sẽ phân chia dòng mã trên.
automobile.push_button_engineStart
đang giúp chúng tôi có được phương pháp đang được sử dụng.
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 chấm.
automobile.push_button_engineStart.apply()
Bây giờ áp dụng và gọi chấp nhận hai tham số.
- bối cảnh
- tranh luận
Vì vậy, ở đây chúng tôi đặt bối cảnh trong dòng mã cuối cùng.
automobile.push_button_engineStart.apply(your_scooter,[20])
Sự khác biệt giữa cuộc gọi và ứng dụng chỉ là việc áp dụng chấp nhận các tham số ở dạng mảng trong khi cuộc gọi đơn giản có thể chấp nhận một danh sách các đối số được phân tách bằng dấu phẩy.
Hàm Bind của 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 nó vào 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í tốt hơn. Trước đó chúng tôi đã sử dụng một phương pháp thuộc về đối tượng ô tô và sử dụng nó để trang bị your_car, your_jet and your_scooter
. Bây giờ hãy tưởng tượng chúng tôi muốn cung cấp một cách riêng push_button_engineStart
biệt để khởi động ô tô riêng của chúng tôi ở bất kỳ giai đoạn nào sau này của việc thực hiện mà chúng tôi 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 chưa 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 tham chiếu.
Thử nghiệm bên dưới thất bại vì cuộc gọi và ứng 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 trong đó chức năng liên kết ăn cắp chương trình
var test_function = automobile.push_button_engineStart.apply(your_scooter);