1. ข้อโต้แย้งคืออะไร
อาร์กิวเมนต์เป็นวัตถุในตัวในจาวาสคริปต์ ไลบรารีฟังก์ชั่น JS ที่สำคัญทั้งหมดใช้วัตถุอาร์กิวเมนต์ ดังนั้นวัตถุ Agruments จึงจำเป็นสำหรับโปรแกรมเมอร์ JavaScript ที่จะคุ้นเคย
ฟังก์ชั่นทั้งหมดมีวัตถุอาร์กิวเมนต์ของตัวเองซึ่งรวมถึงพารามิเตอร์ที่เรียกโดยฟังก์ชั่น มันไม่ใช่อาร์เรย์หากใช้อาร์กิวเมนต์ typeof การส่งคืนเป็น 'วัตถุ' แม้ว่าเราสามารถโทรหาอาร์กิวเมนต์ได้โดยการโทรหาข้อมูล ตัวอย่างเช่นวิธีความยาวและดัชนี แต่วัตถุที่มีการผลักและป๊อปของอาร์เรย์ไม่สามารถใช้ได้
2. สร้างฟังก์ชั่นที่ยืดหยุ่น
ดูเหมือนว่าวัตถุอาร์กิวเมนต์นั้น จำกัด มากที่จะใช้ แต่ในความเป็นจริงมันเป็นวัตถุที่มีประโยชน์มาก คุณสามารถใช้วัตถุอาร์กิวเมนต์เพื่อเปิดใช้งานฟังก์ชันเพื่อเรียกจำนวนพารามิเตอร์ที่ไม่แน่นอน มีฟังก์ชั่นที่จัดรูปแบบในไลบรารี Base2 ของ Dean Edwards ซึ่งแสดงให้เห็นถึงความยืดหยุ่นนี้
คัดลอกรหัสดังต่อไปนี้: รูปแบบฟังก์ชัน (สตริง) {
var args = อาร์กิวเมนต์;
รูปแบบ var = ใหม่ regexp ("%([1-" + อาร์กิวเมนต์ความยาว + "])", "g");
return string (string) .retlace (รูปแบบ, ฟังก์ชัน (จับคู่, ดัชนี) {
return args [ดัชนี];
-
-
เราให้บริการสตริงเทมเพลตที่คุณสามารถเพิ่มตัวยึดตำแหน่งในค่าผลตอบแทนโดยใช้ "%1" ถึง "%9" จากนั้นจัดเตรียมพารามิเตอร์อื่น ๆ อีกเก้าพารามิเตอร์เพื่อแทรก
การคัดลอกรหัสมีดังนี้: รูปแบบ ("และ %1 ต้องการทราบว่ามี %2 you %3″," เอกสาร "," เสื้อ "," สวมใส่ ");
รหัสข้างต้นจะกลับมา: และเอกสารอยากรู้ว่าคุณสวมเสื้อใคร "
มีบางสิ่งที่เราต้องใส่ใจ JavaScript ช่วยให้เราสามารถส่งพารามิเตอร์จำนวนเท่าใดก็ได้ลงในฟังก์ชั่นไม่ว่าเราจะกำหนดฟังก์ชั่นนี้อย่างไร อาร์กิวเมนต์วัตถุได้รับอนุญาตสำหรับสิ่งเหล่านี้
3. แปลงอาร์กิวเมนต์วัตถุเป็นอาร์เรย์จริง
แม้ว่าวัตถุอาร์กิวเมนต์ไม่ใช่อาร์เรย์ JavaScript จริง แต่เราสามารถแปลงเป็นข้อมูลมาตรฐานได้อย่างง่ายดายแล้วดำเนินการอาร์เรย์
การคัดลอกรหัสมีดังนี้: var args = array.prototype.slice.call (อาร์กิวเมนต์);
ตอนนี้ตัวแปรนี้ ARGs มีวัตถุอาร์เรย์จาวาสคริปต์มาตรฐานที่มีพารามิเตอร์ทั้งหมดของฟังก์ชัน
4. สร้างฟังก์ชั่นผ่านวัตถุอาร์กิวเมนต์ที่ตั้งไว้ล่วงหน้า
วัตถุอาร์กิวเมนต์ช่วยให้เราสามารถเรียกใช้วิธี JavaScript ทุกประเภท นี่คือคำจำกัดความของฟังก์ชั่น Makefunc ฟังก์ชั่นนี้ช่วยให้เราสามารถให้การอ้างอิงฟังก์ชั่นและพารามิเตอร์ทั้งหมดของฟังก์ชันนี้ มันจะส่งคืนฟังก์ชั่นที่ไม่ระบุชื่อเพื่อเรียกฟังก์ชั่นที่คุณระบุและยังให้พารามิเตอร์ที่แนบมากับการเรียกใช้ฟังก์ชันที่ไม่ระบุชื่อ
คัดลอกรหัสดังนี้: ฟังก์ชั่น makefunc () {
var args = array.prototype.slice.call (อาร์กิวเมนต์);
var func = args.shift ();
return function () {
return func.apply (null, args.concat (array.prototype.slice.call (อาร์กิวเมนต์)));
-
-
วัตถุอาร์กิวเมนต์แรกให้ MakeFunc อ้างอิงถึงฟังก์ชั่นที่คุณต้องการโทร เขาลบออกจากอาร์เรย์อาร์กิวเมนต์ จากนั้น Makefunc จะส่งคืนฟังก์ชั่นที่ไม่ระบุชื่อเพื่อเรียกใช้วิธีที่ระบุ
อาร์กิวเมนต์ของแอปพลิเคชันแรกชี้ไปที่ขอบเขตของการเรียกใช้ฟังก์ชันส่วนใหญ่ชี้ไปที่ส่วนสำคัญของฟังก์ชัน มาเก็บสิ่งนี้ไว้เป็นโมฆะก่อน อาร์กิวเมนต์ที่สองคืออาร์เรย์ที่จะถูกแปลงเป็นวัตถุอาร์กิวเมนต์สำหรับฟังก์ชันนี้ Makefunc เชื่อมต่อค่าอาร์เรย์ดั้งเดิมลงในวัตถุอาร์กิวเมนต์และอาร์เรย์ของฟังก์ชั่นที่เรียกว่า
คุณต้องส่งออกเทมเพลตที่อยู่ในตำแหน่งเดียวกันเสมอเพื่อที่คุณจะได้ไม่เรียกฟังก์ชั่นรูปแบบทุกครั้งที่คุณอ้างถึงเทมเพลต คุณสามารถใช้ฟังก์ชั่นทั่วไปของ MakeFunc เพื่อส่งคืนฟังก์ชั่นที่สามารถเรียกรูปแบบและเสริมเทมเพลตโดยอัตโนมัติ
การคัดลอกรหัสมีดังนี้: var majortom = makefunc (รูปแบบ, "นี่คือการควบคุมที่สำคัญต่อพื้นดินฉัน %1.");
คุณสามารถเรียกฟังก์ชัน majortom เช่นนี้:
การคัดลอกรหัสมีดังนี้: majortom ("ก้าวผ่านประตู");
Majortom ("ลอยอยู่ในวิธีที่แปลกประหลาดที่สุด");
ทุกครั้งที่คุณเรียก Majortom มันจะเรียกฟังก์ชั่นรูปแบบและอาร์กิวเมนต์แรกในเวลาเดียวกันและเทมเพลตที่เขียนแล้ว จากนั้นมันจะกลับมา
คัดลอกรหัสดังต่อไปนี้: "นี่คือการควบคุมที่สำคัญต่อพื้นดินฉันก้าวผ่านประตู"
“ นี่คือการควบคุมที่สำคัญของทอม
5. สร้างฟังก์ชั่นที่อ้างอิงตัวเอง
คุณอาจคิดว่ามันเจ๋ง แต่มีความประหลาดใจมากขึ้นสำหรับข้อโต้แย้ง เขามีคุณสมบัติที่เป็นประโยชน์อื่น ๆ : วิธี Callee arguments.callee รวมถึงการอ้างอิงถึงฟังก์ชั่นเพื่อสร้างวัตถุอาร์กิวเมนต์ แล้วจะใช้อย่างไร?
วิธีการอาร์กิวเมนต์. callee ช่วยให้ฟังก์ชั่นที่ไม่ระบุชื่อชี้ไปที่ตัวเองได้อย่างสะดวกสบายมาก
ทำซ้ำเป็นฟังก์ชั่นที่มีการอ้างอิงฟังก์ชั่นและตัวเลขสองตัว หมายเลขแรกคือจำนวนฟังก์ชั่นที่เรียกว่าและหมายเลขที่สองคือช่วงเวลาระหว่างการโทรแต่ละครั้งในมิลลิวินาที
การคัดลอกรหัสมีดังนี้: ฟังก์ชั่นซ้ำ (fn, ครั้ง, การหน่วงเวลา) {
return function () {
ถ้า (เวลา> 0) {
fn.apply (null, อาร์กิวเมนต์);
var args = array.prototype.slice.call (อาร์กิวเมนต์);
var self = arguments.callee;
settimeout (function () {self.apply (null, args)}, ล่าช้า);
-
-
-
ฟังก์ชั่นการทำซ้ำใช้วิธีการอาร์กิวเมนต์. callee เพื่อรับการอ้างอิงจากตัวแปรตัวเองไปชี้ไปที่ฟังก์ชั่นที่รันคำสั่งดั้งเดิม ด้วยวิธีนี้ฟังก์ชั่นที่ไม่ระบุชื่อสามารถเรียกได้อีกครั้ง
ฉันมีฟังก์ชั่นสั้น ๆ ที่เป็นโฮสต์สตริงและดำเนินการวิธีการแจ้งเตือน
คัดลอกรหัสดังนี้: ฟังก์ชั่น comms (s) {
การแจ้งเตือน;
-
อย่างไรก็ตามฉันต้องการสร้างเวอร์ชันพิเศษซึ่งฉันสามารถทำซ้ำการกระทำนี้ได้สามครั้งในแต่ละช่วงเวลา 2 วินาที จากนั้นเราทำได้
การคัดลอกรหัสมีดังนี้: var somethingwrong = ทำซ้ำ (comms, 3, 2000);
Somethingwrong ("คุณได้ยินฉัน Major Tom?");
ผลลัพธ์ของการเรียกฟังก์ชั่น SomethingWrong คือการทำซ้ำการดำเนินการนี้สามครั้งโดยแต่ละช่วงเวลาการแจ้งเตือน 2 วินาที
แม้ว่าข้อโต้แย้งจะไม่ได้ใช้บ่อยและแปลกเล็กน้อย แต่ก็เต็มไปด้วยความประหลาดใจและคุ้มค่าที่จะเรียนรู้