ก่อนที่จะอ้างถึงแนวคิดข้างต้นก่อนอื่นต้องการพูดคุยเกี่ยวกับพารามิเตอร์ที่ซ่อนอยู่ของฟังก์ชันในฟังก์ชันใน JavaScript:
ข้อโต้แย้ง
อาร์กิวเมนต์แสดงถึงพารามิเตอร์ที่ดำเนินการและฟังก์ชั่นของการเรียกใช้ฟังก์ชัน [ฟังก์ชั่น.] อาร์กิวเมนต์ [n] พารามิเตอร์
ฟังก์ชั่น: ตัวเลือก ชื่อของวัตถุฟังก์ชั่นจะถูกดำเนินการในขณะนี้
N: ตัวเลือก ในการส่งดัชนีค่าพารามิเตอร์จาก 0 ไปยังวัตถุฟังก์ชัน มันแสดงให้เห็นว่า argumeents เป็นวัตถุที่ซ่อนอยู่ที่สร้างขึ้นนอกเหนือจากพารามิเตอร์ที่ระบุเมื่อเรียกใช้ฟังก์ชัน อาร์กิวเมนต์เป็นวัตถุที่คล้ายกับอาร์เรย์ แต่ไม่ใช่อาร์เรย์ มีความยาวแอตทริบิวต์ความยาวอาร์เรย์ นอกจากนี้ยังมีพารามิเตอร์ที่วัตถุอาร์กิวเมนต์เก็บฟังก์ชั่นที่ส่งผ่านไปยังฟังก์ชันจริงไม่ จำกัด เฉพาะรายการพารามิเตอร์ที่กำหนดโดยคำสั่งการทำงานและไม่สามารถสร้างได้อย่างชัดเจนเพื่อสร้างวัตถุอาร์กิวเมนต์ วัตถุอาร์กิวเมนต์สามารถใช้ได้ที่จุดเริ่มต้นของฟังก์ชันเท่านั้น
ตัวอย่างต่อไปนี้อธิบายคุณสมบัติเหล่านี้โดยละเอียด
คัดลอกรหัสรหัสดังนี้:
// การใช้วัตถุอาร์กิวเมนต์
ฟังก์ชั่น argtest (a, b) {{
var i, s = "ฟังก์ชั่น argtest ที่คาดหวัง";
var numargs = อาร์กิวเมนต์ความยาว; // รับค่าของพารามิเตอร์ที่ผ่าน
var expargs = argtest.length; // รับค่าของพารามิเตอร์ที่คาดหวัง
ถ้า (expargs <2)
s + = expargs + "อาร์กิวเมนต์";
อื่น
s + = expargs + "อาร์กิวเมนต์" ;;
ถ้า (numargs <2)
s + = numargs + "ถูกส่งผ่าน";
อื่น
s + = numargs + "เราผ่านไปแล้ว";
s += ""
สำหรับ (i = 0; i <numargs; i ++) {// รับเนื้อหาพารามิเตอร์
s + = "arg" + i + "=" + อาร์กิวเมนต์ + "" "";
-
ส่งคืน; // ส่งคืนรายการพารามิเตอร์
-
นี่คือรหัสที่อธิบายว่าอาร์กิวเมนต์ไม่ใช่อาร์เรย์ (คลาสอาร์เรย์):
คัดลอกรหัสรหัสดังนี้:
array.prototype.setValue = 1;
การแจ้งเตือน (array ใหม่ (). selfvalue);
การทดสอบฟังก์ชั่น () {
การแจ้งเตือน (อาร์กิวเมนต์ SelfValue);
-
คุณจะพบจอแสดงผลการแจ้งเตือนครั้งแรก 1 ซึ่งหมายความว่าวัตถุอาร์เรย์มีแอตทริบิวต์ SelfValue ที่มีค่า 1 เมื่อคุณเรียกฟังก์ชั่น testagumens คุณจะพบว่า "ไม่ได้กำหนด" แสดงว่าไม่ใช่แอตทริบิวต์ของอาร์กิวเมนต์ คือแอตทริบิวต์ของอาร์กิวเมนต์นั่นคืออาร์กิวเมนต์ไม่ใช่วัตถุอาร์เรย์
เพิ่มวิธีง่ายๆในการเพิ่มที่นี่: การแจ้งเตือน (อาร์กิวเมนต์อินสแตนซ์ของอาร์เรย์);
การแจ้งเตือน (อาร์กิวเมนต์อินสแตนซ์ของวัตถุ);
ผู้โทรหา
ส่งคืนการอ้างอิงไปยังฟังก์ชั่นที่เรียกฟังก์ชันปัจจุบัน
functionName.Caller
วัตถุ FunctionName คือชื่อของฟังก์ชั่นการดำเนินการ
อธิบาย
สำหรับฟังก์ชั่นแอตทริบิวต์ผู้โทรจะถูกกำหนดเฉพาะเมื่อฟังก์ชั่นถูกเรียกใช้งานเท่านั้น หากฟังก์ชั่นถูกเรียกจากชั้นบนสุดจากนั้นผู้โทรจะมีค่า NULL หากแอตทริบิวต์ผู้โทรถูกใช้ในบริบทของสตริงผลลัพธ์จะเหมือนกับ functionName.tstring นั่นคือมันแสดงให้เห็นว่าฟังก์ชันของฟังก์ชั่นจะปรากฏขึ้น
หมายเหตุ: function.toString () สามารถตระหนักถึงฟังก์ชั่นต่อต้านการรวบรวมของฟังก์ชั่น
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการใช้แอตทริบิวต์ผู้โทร:
คัดลอกรหัสรหัสดังนี้:
// การสาธิตผู้โทร {
ฟังก์ชั่น calldemo () {
if (callerdemo.caller) {
var a = callerdemo.caller.toString ();
การแจ้งเตือน (a);
} อื่น {
การแจ้งเตือน ("นี่คือฟังก์ชั่นด้านบน");
-
-
ฟังก์ชั่น handlecaller () {
CallerDemo ();
-
คนเจ้าชู้
ส่งคืนข้อความของวัตถุฟังก์ชันที่กำลังดำเนินการข้อความของวัตถุฟังก์ชันที่ระบุ [ฟังก์ชั่น.] อาร์กิวเมนต์พารามิเตอร์ตัวเลือกที่เป็นตัวเลือกคือชื่อของวัตถุฟังก์ชันที่กำลังดำเนินการอยู่ อธิบายว่าค่าเริ่มต้นของแอตทริบิวต์ Callee คือวัตถุฟังก์ชันที่กำลังดำเนินการ แอตทริบิวต์ Callee เป็นสมาชิกของวัตถุอาร์กิวเมนต์ซึ่งบ่งบอกถึงการอ้างอิงไปยังวัตถุฟังก์ชันเองซึ่งเอื้อต่อการเรียกซ้ำของฟังก์ชันที่ไม่ระบุชื่อหรือบรรจุภัณฑ์ของฟังก์ชั่น แอตทริบิวต์นี้จะใช้ได้เฉพาะเมื่อมีการดำเนินการฟังก์ชันสหสัมพันธ์ ควรสังเกตว่า Callee มีแอตทริบิวต์ความยาว อาร์กิวเมนต์ความยาวเป็นความยาวพารามิเตอร์ที่เป็นของแข็งและอาร์กิวเมนต์ callee.length คือความยาวของพารามิเตอร์ซึ่งสามารถกำหนดว่าความยาวของพารามิเตอร์สอดคล้องกับความยาวพารามิเตอร์จริงหรือไม่
ตัวอย่างที่เป็นแบบอย่าง
คัดลอกรหัสรหัสดังนี้:
// Callee สามารถพิมพ์ได้เอง
ฟังก์ชั่นเรียกว่า () {
การแจ้งเตือน (arguments.callee);
-
// ใช้เพื่อตรวจสอบพารามิเตอร์
ฟังก์ชั่น calleelelengthdemo (arg1, arg2) {{
if (arguments.length == arguments.callee.length) {
window.alert ("การตรวจสอบความยาวของโสมและพารามิเตอร์ที่เป็นของแข็งนั้นถูกต้อง!");
กลับ;
} อื่น {
การแจ้งเตือน ("ความยาวพารามิเตอร์ทึบ:" +อาร์กิวเมนต์ความยาว);
การแจ้งเตือน ("" รูปร่างที่อนุญาต: +อาร์กิวเมนต์ callee.length);
-
-
// การคำนวณแบบเรียกซ้ำ
var sum = function (n) {
ถ้า (n <= 0)
กลับ 1;
อื่น
ส่งคืน n + arguments.callee (n -1)
} เปรียบเทียบกับฟังก์ชั่นการเรียกซ้ำทั่วไป: var sum = function (n) {
ถ้า (1 == n) กลับ 1;
อื่น ๆ ส่งคืน n + sum (n-1);
-
ในขณะที่โทร: แจ้งเตือน (ผลรวม (100));
ในหมู่พวกเขาฟังก์ชั่นมีการอ้างอิงถึงผลรวมของตัวเอง
สมัครและโทร
บทบาทของพวกเขาคือการผูกฟังก์ชั่นกับวัตถุอื่น
สมัคร (Thisarg, Argarray);
โทร (thisarg [, arg1, arg2 ... ]);
นั่นคือตัวชี้นี้ภายในฟังก์ชั่นทั้งหมดจะถูกกำหนดให้กับ Thisarg ซึ่งสามารถตระหนักถึงวัตถุประสงค์ของวัตถุประสงค์ในการใช้ฟังก์ชันเป็นวิธีการอื่น
หากไม่มีการจัดเตรียมพารามิเตอร์ของ Argarray และ Thisarg วัตถุทั่วโลกจะถูกใช้เป็นเช่นนี้และไม่สามารถส่งผ่านพารามิเตอร์ใด ๆ ได้ คำอธิบายการโทรวิธีการโทรสามารถเปลี่ยนบริบทของวัตถุของฟังก์ชั่นจากบริบทเริ่มต้นเป็นวัตถุใหม่ที่ระบุโดย Thisarg
หากคุณไม่ได้จัดเตรียมพารามิเตอร์นี้วัตถุทั่วโลกจะถูกใช้เป็นเทคนิคที่เกี่ยวข้องกับการใช้งาน: หลังจากใช้การโทรและใช้แล้วมีเทคนิคอื่นในนั้น ฟังก์ชันปัจจุบัน (คลาส)
ดูตัวอย่างต่อไปนี้:
คัดลอกรหัสรหัสดังนี้:
// การสาธิตที่สืบทอดมา
ฟังก์ชันฐาน () {
this.member = "dnnnsun_member";
this.method = function () {
window.alert (this.member);
-
-
ฟังก์ชัน Expedition () {) {
base.call (นี่);
window.alert (สมาชิก);
window.alert (this.method);
-
ตัวอย่างข้างต้นสามารถเห็นได้ว่าหลังจากการโทรขยายสามารถสืบทอดวิธีการและคุณลักษณะของฐาน โดยวิธีการใช้งานเพื่อสร้างโมเดลนิยามในต้นแบบ JavaScript Framework
คัดลอกรหัสรหัสดังนี้:
var class = {
สร้าง: function () {
return function () {
this.initialize.apply (นี่, ข้อโต้แย้ง);
-
-
-
การวิเคราะห์: จากรหัสวัตถุมีเพียงวิธีเดียวเท่านั้น: สร้างซึ่งส่งคืนฟังก์ชันนั่นคือคลาส แต่นี่ก็เป็นตัวสร้างของคลาสที่มีการกำหนดค่าเริ่มต้นและวิธีนี้เป็นฟังก์ชันการเริ่มต้นที่กำหนดไว้ระหว่างการสร้างคลาส ด้วยวิธีนี้ตัวอย่างรูปแบบการสร้างชั้นเรียนในต้นแบบสามารถนำไปใช้ได้:
คัดลอกรหัสรหัสดังนี้:
Var Vehicle = class.create ();
ยานพาหนะ prototype = {
เริ่มต้น: ฟังก์ชั่น (ประเภท) {
this.type = type;
-
showself: function () {{)
การแจ้งเตือน ("นี่คือมาก"+ this.type);
-
} var moto = ยานพาหนะใหม่ ("moto");
moto.showself ();