เพื่อเป็นการระลึกว่าฉันยังไม่ได้เขียนบล็อกเป็นเวลา 10 ปีโพสต์บล็อกแรกจะเริ่มต้นด้วยเคล็ดลับที่น่าสนใจ -___-
ใน ES5 เมื่อเราเรียกฟังก์ชั่นถ้าพารามิเตอร์ที่จะส่งผ่านจะถูกสร้างขึ้นตามฟังก์ชั่นหรือเงื่อนไขอื่น ๆ นั่นคือเมื่อเราไม่แน่ใจว่าจะผ่านพารามิเตอร์กี่ตัวเราควรทำอย่างไรโดยไม่เปลี่ยนฟังก์ชั่นดั้งเดิม
(แน่นอนพยายามหลีกเลี่ยงสถานการณ์ที่อธิบายไว้ในบทความนี้เช่นการเปลี่ยนพารามิเตอร์เป็นวัตถุหรืออาร์เรย์ ฯลฯ )
คนส่วนใหญ่อาจรู้ว่าการใช้งานสามารถแก้ปัญหานี้ได้อย่างสมบูรณ์:
เช่นเดียวกับการโทรใช้พารามิเตอร์แรกจะถูกใช้เป็นวัตถุการเรียกของฟังก์ชันนั่นคือตัวชี้ของสิ่งนี้ในฟังก์ชั่นการโทรถูกเขียนใหม่เป็นพารามิเตอร์แรก หากไม่ใช่วิธีการของวัตถุคุณสามารถเพิกเฉยต่อสิ่งนี้และส่งผ่านว่าง
ความแตกต่างคือพารามิเตอร์ต่อไปนี้ใช้พารามิเตอร์ทั้งหมดที่จะส่งผ่านไปยังฟังก์ชั่นการโทรในอาร์เรย์และการโทรจะต่อท้ายตามลำดับเช่นฟังก์ชันดั้งเดิม
เนื่องจากเป็นอาร์เรย์จึงสามารถควบคุมได้ การสร้างอาร์เรย์ตามฟังก์ชั่นอื่น ๆ หรือการตัดสินเชิงตรรกะสามารถบรรลุวัตถุประสงค์ของการส่งผ่านพารามิเตอร์ตัวเลขไดนามิก
แต่ฉันพบอาการปวดหัว ฉันต้องผ่านพารามิเตอร์แบบไดนามิกเมื่อสร้างวัตถุด้วยใหม่ ฉันใช้เวลาเพียงครั้งเดียวทุกสองสามปี:
หากคุณใช้ ES6 กับพารามิเตอร์ที่เหลือไม่มีปัญหาใด ๆ ข้างต้นเป็นปัญหา โปรดทราบว่าการเพิ่มสามจุดก่อนที่อาร์เรย์ args ไม่ใช่ข้อผิดพลาดทางไวยากรณ์ แต่วิธีการเขียนพารามิเตอร์ REST ที่จัดทำโดย ES6 คุณสามารถเข้าใจได้ว่าเป็นการแทนที่ ... args ด้วยอาร์เรย์ args กับตัวละครหลังจากวงเล็บสี่เหลี่ยมจัตุรัส
แต่เป็นไปไม่ได้ที่จะนำไปใช้ใน ES5 หรือไม่? ท้ายที่สุด ES6 ส่วนใหญ่เป็นน้ำตาลวากยสัมพันธ์และคุณสามารถใช้เครื่องมือเช่น Babel เพื่อรวบรวม ES5 ด้วยคำถามลองใช้ Babel เพื่อรวบรวมและดูสิ่งที่เราได้รับ:
ฉันตกใจเมื่อเห็นบรรทัดสุดท้าย อย่ากลัว มาวิเคราะห์รหัสนี้กันเถอะ ก่อนอื่นให้แยกชิ้นส่วนและดูในสามขั้นตอน:
1. ไม่ต้องสงสัยเลยว่าการใช้ concat เพื่อ concatenate null กับพารามิเตอร์ของเราเป็นอาร์เรย์เป็นพารามิเตอร์ที่สองที่ใช้นั่นคือเราได้รับ [null, 1, 2, 3];
2. มาคำนวณ พารามิเตอร์แรก Foo จะแทนที่ฟังก์ชั่นเพื่อเรียกใช้วิธีการผูกเนรธคูณ เนื้อหาของอาร์เรย์พารามิเตอร์ที่สองจะถูกส่งผ่านเป็นพารามิเตอร์การผูกนั่นคือ foo.bind (null, 1, 2, 3);
3. พารามิเตอร์แรกของวิธีการผูกจะคล้ายกับการใช้และการโทรแก้ไขตัวชี้นี้และพารามิเตอร์ที่ตามมาสามารถปลูกฝังค่าอาร์กิวเมนต์นำที่ตั้งไว้ล่วงหน้าที่ตั้งไว้ล่วงหน้าสำหรับฟังก์ชัน กล่าวคือเมื่อการผูกถูกดำเนินการเราจะได้คลาส FOO ที่มีค่าพารามิเตอร์สามค่าที่ฉีดในชุดแรกของวงเล็บซึ่งเรียกว่า foowithargs ในขณะนี้;
ในที่สุดเมื่อเราใหม่ foowithargs (); เราไม่จำเป็นต้องผ่านพารามิเตอร์ใด ๆ เทียบเท่ากับ Foo ใหม่ (1, 2, 3);