โทรสมัครและผูก และแตกต่างกันอย่างไร
ให้เรียนรู้การโทรและสมัครโดยใช้คำศัพท์ทุกวัน
คุณมีรถยนต์สามคันyour_scooter , your_car and your_jet
ที่ขึ้นต้นด้วยกลไกแบบเดียวกัน (วิธีการ) เราได้สร้างวัตถุที่มีวิธีการautomobile
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");
}
}
ให้เข้าใจเมื่อมีการโทรและใช้งาน ช่วยให้สมมติว่าคุณเป็นวิศวกรและคุณมีyour_scooter
, your_car
และyour_jet
ซึ่งไม่ได้มาพร้อมกับ push_button_engine_start push_button_engineStart
และคุณต้องการที่จะใช้บุคคลที่สาม
หากคุณเรียกใช้บรรทัดของรหัสต่อไปนี้พวกเขาจะให้ข้อผิดพลาด ทำไม?
//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);
ดังนั้นตัวอย่างข้างต้นจะทำให้ your_scooter, your_car, your_jet มีคุณสมบัติจากวัตถุรถยนต์
ลองดำดิ่งลึกลงไปที่
นี่เราจะแบ่งบรรทัดด้านบนของรหัส
automobile.push_button_engineStart
กำลังช่วยให้เราได้รับวิธีการใช้งาน
นอกจากนี้เรายังใช้ใช้หรือโทรโดยใช้เครื่องหมายจุด
automobile.push_button_engineStart.apply()
ตอนนี้ใช้และโทรรับสองพารามิเตอร์
- บริบท
- ข้อโต้แย้ง
ดังนั้นที่นี่เราตั้งบริบทในบรรทัดสุดท้ายของรหัส
automobile.push_button_engineStart.apply(your_scooter,[20])
ความแตกต่างระหว่างการโทรและนำไปใช้เป็นเพียงการใช้ที่ยอมรับพารามิเตอร์ในรูปแบบของอาร์เรย์ในขณะที่การโทรก็สามารถยอมรับรายการของอาร์กิวเมนต์ที่คั่นด้วยเครื่องหมายจุลภาค
ฟังก์ชั่น JS Bind คืออะไร?
ฟังก์ชั่นการผูกนั้นเป็นพื้นซึ่งผูกบริบทของบางสิ่งบางอย่างแล้วเก็บไว้ในตัวแปรสำหรับการดำเนินการในระยะต่อมา
มาทำให้ตัวอย่างก่อนหน้าของเราดียิ่งขึ้น your_car, your_jet and your_scooter
ก่อนหน้านี้เราใช้วิธีการที่อยู่ในวัตถุรถยนต์และใช้มันเพื่อให้ ตอนนี้ลองนึกภาพว่าเราต้องการแยกจากpush_button_engineStart
กันเพื่อเริ่มรถยนต์ของเราทีละขั้นตอนของการประหารชีวิตที่เราต้องการ
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);
ยังไม่พอใจใช่ไหม
มาทำให้ชัดเจนเหมือนหยดน้ำตา ใช้เวลาในการทดลอง เราจะกลับไปที่การโทรและใช้แอปพลิเคชันฟังก์ชั่นและลองเก็บค่าของฟังก์ชั่นเป็นข้อมูลอ้างอิง
การทดลองด้านล่างล้มเหลวเนื่องจากการเรียกและนำไปใช้ถูกเรียกใช้ทันทีดังนั้นเราจึงไม่เคยไปถึงขั้นตอนของการจัดเก็บการอ้างอิงในตัวแปรซึ่งเป็นที่ที่ฟังก์ชันการผูกจะขโมยการแสดง
var test_function = automobile.push_button_engineStart.apply(your_scooter);