การใช้งานของทั้งสามฟังก์ชั่นการเรียกใช้และการผูกเป็นจุดความรู้ที่ไม่สามารถเอาชนะได้โดยการเรียนรู้ภาษาของ JavaScript ให้ฉันสรุปการใช้งานของพวกเขาทั้งสามและสถานการณ์แอปพลิเคชันทั่วไป
ก่อนอื่นให้ดูที่ฟังก์ชั่นการโทรซึ่งสามารถเข้าใจได้ว่า "ยืม" และ "คำขอ" ลองนึกภาพสถานการณ์ต่อไปนี้: คุณกำลังเดินคนเดียวและต้องการโทรหาที่บ้านหากคุณมีเรื่องเร่งด่วน แต่น่าเสียดายที่โทรศัพท์ของคุณเป็นหนี้หรือไม่มีอำนาจหรือตกอยู่ในหลุม ในระยะสั้นโทรศัพท์ของคุณไม่ทำงาน แต่คุณต้องโทรออกเพื่อให้คุณสามารถยืมโทรศัพท์มือถือของเพื่อนโทรศัพท์มือถือของเพื่อนบ้านหรือโทรศัพท์สาธารณะ ด้วยวิธีนี้คุณสามารถโทรออกได้โดยไม่ต้องใช้โทรศัพท์ สำหรับโทรศัพท์ที่คุณใช้มันไม่สำคัญ อย่างไรก็ตามมันเป็นผลเช่นเดียวกับการโทรด้วยโทรศัพท์ของคุณเอง ความตั้งใจดั้งเดิมของฟังก์ชั่นการโทรก็คล้ายกับนี้เช่นกัน ให้ฉันใช้รหัสเพื่อจำลองสถานการณ์แอปพลิเคชัน:
var frog = {name: 'frog', say: function () {Alert (this.name); }} var rabbit = {ชื่อ: 'Rabbit'} frog.say.call (rubbit) // rabbitRubbit เป็นวัตถุที่โง่ แต่ถ้าเขาต้องการพูดชื่อของเขามันเป็นไปไม่ได้ที่จะบรรลุความสามารถของเขาเอง โชคดีที่มีเพื่อนที่ดีชื่อ Frog ซึ่งสามารถพูดได้ ดังนั้น Rubbit จึงขอให้กบตระหนักถึงความปรารถนานี้ พารามิเตอร์แรกของ FROG.SAY.CALL () จะต้องกรอกในบุคคลที่ออกคำขอและทนายความชอบเรียกมันว่าลูกค้า นี่คือกบขอ Rubbit ที่จะพูดชื่อสำหรับมันดังนั้นกรอกข้อมูลใน Rubbit ด้วยวิธีนี้เมื่อพูดชื่อ Rubbit จะถูกค้นหาแทนชื่อกบ มันจะเป็นอย่างไรถ้าฉันเติมกบที่นี่? มันเหมือนกับการขอให้ตัวเองทำอะไรบางอย่างและให้อาหารเกลือ คุณสามารถลอง:
var frog = {name: 'frog', say: function () {Alert (this.name); }} var rabbit = {ชื่อ: 'Rabbit'} frog.say.call (กบ) // กบการให้อาหารเกลือตัวเองต้องเป็นชื่อของคุณและนั่นก็ไม่มีอะไรที่คาดไม่ถึง มาดูการใช้การโทรแบบคลาสสิก:
// แปลงพารามิเตอร์เป็นฟังก์ชั่นวัตถุอาร์เรย์จริง frog () {var arr = [] .slice.call (อาร์กิวเมนต์); console.log (arguments.slice, arr.slice) // function slice () {[รหัสดั้งเดิม]}} กบ (1,2,3,4)หลังจากการโทรนี้เราสามารถใช้วัตถุอาร์กิวเมนต์เป็นวัตถุอาร์เรย์ มีหลายวิธีในการใช้การโทร หากคุณเปิดซอร์สโค้ดของ jQuery คุณสามารถหาสถานที่มากมายที่จะใช้ได้อย่างง่ายดาย ฉันจะไม่แสดงรายการทั้งหมดที่นี่ แต่ฉันจะกลับไปที่เกิดเหตุต่อหน้าเรา ง่ายเกินไปที่จะยืมโทรศัพท์ หลังจากโทรศัพท์ฉันจะต้องนำบางสิ่งบางอย่างกลับมาอย่างแน่นอน ท้ายที่สุดฉันได้หลงทางมาหลายปีแล้วและยังไม่ได้ก่อการร้ายกับผู้สูงอายุและได้ซื้ออาหารท้องถิ่นบางอย่างเพื่อกลับไป มันยอดเยี่ยมอย่างแน่นอน อย่างไรก็ตามความกดดันของชีวิตภายนอกนั้นยอดเยี่ยมมากนอกเหนือจากการทำงานแล้วยังมีการทำงานล่วงเวลาทุกวัน หากคุณลาออกไม่เพียง แต่เงินเดือนของคุณจะถูกหักเท่านั้น แต่คุณยังต้องใช้ค่าใช้จ่ายในการเดินทางจำนวนมาก ผลรวมของเงินนี้อาจเพียงพอสำหรับผู้สูงอายุที่จะใช้เวลาหนึ่งปีที่บ้าน มันไม่คุ้มค่าที่จะคิดเกี่ยวกับมันดังนั้นฉันจึงคิดถึงฟังก์ชั่นการโทรอีกครั้ง ขอความช่วยเหลือเป็นทางเลือกที่ฉลาดมากที่จะนำกลับมาใช้และไม่คิดค่าใช้จ่ายไม่ จำกัด ปริมาณไม่ จำกัด น้ำหนักและสามารถนำมาซึ่งมากที่สุดเท่าที่คุณมี ฉันจะใช้รหัสเพื่อสาธิตอีกครั้ง:
var frog = {ชื่อ: 'กบ', ส่ง: ฟังก์ชั่น (เงิน, อาหาร, นม, suagate) {Alert (เงิน+อาหาร+นม+suagate); }} var rabbit = {ชื่อ: 'Rabbit'} frog.send.call (rubbit, 'money', 'อาหาร', 'นม', 'suagate')หากคุณรวยและจงใจคุณสามารถส่ง iPhone6 Plus หรืออะไรสักอย่างกลับมา -
เมื่อพูดถึงเรื่องนี้การโทรเกือบจะจบลงแล้ว ฉันไม่รู้ว่าละครฉากข้างต้นทำให้คุณเข้าใจว่าการโทรคืออะไร ถ้ามันเป็นเพียงการคิดถึงบ้านของคุณฉันก็ขอโทษ
โทรยังมีพี่ชายครึ่งหนึ่งที่เรียกว่าสมัคร หากคุณเข้าใจการใช้การโทรแล้วการสมัครก็เป็นสิ่งเดียวกัน ความแตกต่างเพียงอย่างเดียวคือเมื่อใช้ไม่ชอบที่จะส่งต่อสิ่งต่าง ๆ ดูเหมือนว่าลำบากมากที่จะใส่สิ่งหนึ่งในกระเป๋าและมันก็ไม่เป็นมิตรกับสิ่งแวดล้อม ดังนั้นเขาจึงจัดหากล่องขนาดใหญ่สำหรับสิ่งต่าง ๆ และใส่ทุกสิ่งที่คุณต้องการส่งต่อในกล่องที่มีให้ กล่องใหญ่นี้เป็นอาร์เรย์ หากตัวอย่างข้างต้นทำด้วยการใช้งานจะเป็นเช่นนี้:
var frog = {ชื่อ: 'กบ', ส่ง: ฟังก์ชั่น (เงิน, อาหาร, นม, suagate) {Alert (เงิน+อาหาร+นม+suagate); }} var rabbit = {ชื่อ: 'Rabbit'} // ให้ความสนใจกับความแตกต่างในพารามิเตอร์ frog.send.apply (rubbit, ['money', 'อาหาร', 'นม', 'suagate']))))))))))ข้างต้นเป็นชีวิตในอดีตและปัจจุบันของการสมัครโทร แต่โดยไม่คาดคิดพ่อของและโทรหาโชคลาภในอสังหาริมทรัพย์เมื่อไม่กี่ปีที่ผ่านมาและมีลูกนอกกฎหมายชื่อ Bind Outside แม้ว่าพี่ชายสองคนของเขาจะโทรและสมัครเข้าร่วมในอีกไม่กี่ปีต่อมา แต่ความสามารถของพวกเขาไม่ควรประเมินต่ำเกินไป อย่างไรก็ตามตัวตนของเขาไม่ได้รับการยอมรับในบางสถานที่ ตัวอย่างเช่น IE6 ต่อไปฉันจะใช้รหัสเพื่อแสดงทักษะของเขา:
ชื่อ var = 'rubbit'; var frog = {ชื่อ: 'frog', say: function () {settimeout (ฟังก์ชั่น (เงิน, นม) {แจ้งเตือน (this.name+money+milk)}. -bind (นี่, 'เงิน', 'นม'), 1,000)}} frog.say ();จากการเปรียบเทียบพบว่าการผูกสามารถเชื่อมต่อโดยตรงกับ function () {} มันเทียบเท่ากับการบันทึกการโทรและใช้และระบุเงินต้นและพารามิเตอร์ที่จะส่งผ่านโดยตรงหลังจากฟังก์ชั่น ในแง่ของรูปแบบของการผ่านซิกมามันเป็นเหมือนสาย
เกี่ยวกับการผูกลองมาดูการใช้งานคลาสสิกอื่น:
var obj = {ชื่อ: 'frog'} document.addeVentListener ('คลิก', ฟังก์ชัน () {แจ้งเตือน (this.name); // frog} .bind (obj), false);เพื่อสรุปใช้, โทร, ผูก, ความคล้ายคลึงกันระหว่างสามพี่น้องนี้คือ:
1. พารามิเตอร์แรกคือขอบเขตของรัฐบาลนั่นคือดินแดนที่เป็นงาน
2. พารามิเตอร์ทั้งหมดสามารถส่งผ่านได้
ความแตกต่างคือ:
ใช้การโทรมีความเข้ากันได้ดีกว่าผูกเบราว์เซอร์รุ่นที่ต่ำกว่าบางรุ่นไม่รองรับ
พารามิเตอร์ที่ส่งผ่านโดยการสมัครจะต้องถูกห่อในอาร์เรย์ในขณะที่การโทรและการผูกจะแสดงรายการทีละรายการ
คุณได้รับความเข้าใจที่ลึกซึ้งยิ่งขึ้นเกี่ยวกับการใช้งานทั้งสามฟังก์ชั่นการเรียกใช้และผูกมัดหรือไม่? ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับคุณ