คำสำคัญ: ข้อโต้แย้ง ผู้โทร ผู้โทร
อาร์กิวเมนต์: แสดงถึงพารามิเตอร์ที่ส่งเข้าสู่ฟังก์ชัน
ผู้ถูกเรียก: ข้อความที่แสดงถึงฟังก์ชันและเนื้อหาของฟังก์ชัน
ผู้โทร: แสดงถึงฟังก์ชันที่เรียกใช้ฟังก์ชัน
ข้อโต้แย้ง
วัตถุนี้แสดงถึงฟังก์ชันที่กำลังดำเนินการและพารามิเตอร์ของฟังก์ชันที่เรียกใช้ฟังก์ชันนั้น
ผู้โทร
ส่งกลับการอ้างอิงถึงฟังก์ชันที่เรียกว่าฟังก์ชันปัจจุบัน
functionName.ผู้โทร
วัตถุ functionName คือชื่อของฟังก์ชันที่กำลังดำเนินการ
แสดงให้เห็น
สำหรับฟังก์ชัน คุณลักษณะผู้เรียกจะถูกกำหนดเมื่อมีการดำเนินการฟังก์ชันเท่านั้น ถ้าฟังก์ชันถูกเรียกจากระดับบนสุด ผู้เรียกจะมีค่าว่าง หากใช้แอตทริบิวต์ผู้เรียกในบริบทสตริง ผลลัพธ์จะเหมือนกับ functionName.toString นั่นคือข้อความที่ถอดรหัสแล้วของฟังก์ชันจะปรากฏขึ้น
ผู้โทร
ส่งคืนออบเจ็กต์ Function ที่กำลังดำเนินการ ซึ่งเป็นเนื้อความของออบเจ็กต์ Function ที่ระบุ
[ฟังก์ชั่น]อาร์กิวเมนต์.callee
พารามิเตอร์ฟังก์ชันเสริมคือชื่อของออบเจ็กต์ฟังก์ชันที่กำลังดำเนินการอยู่
แสดงให้เห็น
ค่าเริ่มต้นของแอตทริบิวต์ callee คือวัตถุ Function ที่กำลังดำเนินการ
แอ็ตทริบิวต์ callee เป็นสมาชิกของอ็อบเจ็กต์อาร์กิวเมนต์ ซึ่งแสดงถึงการอ้างอิงถึงอ็อบเจ็กต์ฟังก์ชัน ซึ่งเป็นประโยชน์ต่อการเรียกซ้ำของฟังก์ชันที่ไม่ระบุชื่อ หรือเพื่อให้แน่ใจว่ามีการห่อหุ้มฟังก์ชัน ตัวอย่างเช่น ตัวอย่างต่อไปนี้จะคำนวณผลรวมของธรรมชาติแบบวนซ้ำ ตัวเลขตั้งแต่ 1 ถึง n คุณสมบัตินี้จะใช้ได้เฉพาะเมื่อมีการดำเนินการฟังก์ชันที่เกี่ยวข้องเท่านั้น ควรสังเกตด้วยว่าผู้เรียกมีแอตทริบิวต์ความยาว ซึ่งบางครั้งก็ดีกว่าสำหรับการตรวจสอบ arguments.length คือความยาวพารามิเตอร์จริง และ arguments.callee.length คือความยาวพารามิเตอร์อย่างเป็นทางการ จากนี้ คุณสามารถกำหนดได้ว่าความยาวพารามิเตอร์อย่างเป็นทางการสอดคล้องกับความยาวพารามิเตอร์จริงเมื่อเรียกใช้หรือไม่
คัดลอกรหัสรหัสดังต่อไปนี้:
<script type='text/javascript'>
การทดสอบฟังก์ชัน(x,y,z)
-
alert("ความยาวพารามิเตอร์จริง:"+arguments.length);
alert("ความยาวพารามิเตอร์อย่างเป็นทางการ:"+arguments.callee.length);
alert("ความยาวพารามิเตอร์อย่างเป็นทางการ:"+test.length);
การแจ้งเตือน (ข้อโต้แย้ง [ 0 ])
alert(test[ 0 ]) // undefinated ไม่มีการใช้งานดังกล่าว
-
//ทดสอบ(1,2,3);
ทดสอบ(1,2,3,4);
-
* อาร์กิวเมนต์ไม่ใช่อาร์เรย์ (คลาส Array)
-
อาร์เรย์.ต้นแบบ.selfvalue = 1;
ฟังก์ชั่น testAguments() {
การแจ้งเตือน ( " arguments.selfvalue= " + arguments.selfvalue);
-
alert("Array.sefvalue="+new Array().selfvalue);
ทดสอบ Aguments();
-
* แสดงให้เห็นถึงคุณลักษณะผู้โทรของฟังก์ชัน
* คำอธิบาย: (ฟังก์ชั่นปัจจุบัน).ผู้เรียก: ส่งกลับการอ้างอิงไปยังฟังก์ชั่นที่เรียกว่าฟังก์ชั่นปัจจุบัน
-
ฟังก์ชั่นผู้โทรDemo() {
ถ้า (callerDemo.caller) {
var a = callerDemo.caller.arguments[ 0 ];
การแจ้งเตือน (ก);
} อื่น {
alert( " นี่คือฟังก์ชันระดับบนสุด " );
-
-
ฟังก์ชั่น handleCaller () {
ผู้โทรสาธิต();
-
ผู้โทรสาธิต();
handleCaller("พารามิเตอร์ 1", "พารามิเตอร์ 2");
-
* แสดงให้เห็นถึงคุณลักษณะผู้ถูกเรียกของฟังก์ชัน
* คำอธิบาย: arguments.callee: ค่าเริ่มต้นคือออบเจ็กต์ฟังก์ชันที่กำลังดำเนินการ ซึ่งใช้สำหรับฟังก์ชันที่ไม่ระบุชื่อ
-
ฟังก์ชั่น calleeDemo() {
การแจ้งเตือน (arguments.callee);
-
calleeDemo();
(function(arg0,arg1){alert("จำนวนรูปร่างคือ: "+arguments.callee.length)})();
-
* สาธิตการใช้งานฟังก์ชัน Apply และ Call
* หมายเหตุ: ฟังก์ชันนี้คือการผูกฟังก์ชันกับอ็อบเจ็กต์อื่นเพื่อรัน ข้อแตกต่างเพียงอย่างเดียวระหว่างทั้งสองคือวิธีการกำหนดพารามิเตอร์:
* ใช้ (thisArg, argArray);
* โทร(thisArg[,arg1,arg2…] ]);
* นั่นคือตัวชี้นี้ภายในฟังก์ชันทั้งหมดจะถูกกำหนด thisArg
-
functionObjectA() {
alert( "ดำเนินการ ObjectA() " );
การแจ้งเตือน (ข้อโต้แย้ง [ 0 ]);
นี้ .hit = ฟังก์ชั่น (msg) {alert (msg)}
.info นี้ = "ฉันมาจาก ObjectA"
-
functionObjectB() {
alert( "ดำเนินการ ObjectB() " );
// เรียกเมธอด ObjectA() และทั้งหมดนี้ในตัวสร้าง ObjectA จะถูกแทนที่ด้วยสิ่งนี้ใน ObjectB
ObjectA.apply (สิ่งนี้ อาร์กิวเมนต์); // ObjectA.call (สิ่งนี้);
การแจ้งเตือน (.info นี้);
-
ObjectB('พารามิเตอร์ 0');
ค่า var = "ตัวแปรทั่วโลก";
ฟังก์ชั่น Obj() {
นี้ .value = "วัตถุ!";
-
ฟังก์ชั่น Fun1() {
การแจ้งเตือน ( .value นี้);
-
สนุก1();
Fun1.apply (หน้าต่าง);
Fun1.apply(วัตถุใหม่());
</สคริปต์>