นี้
นี่คือคำหลักใน JavaScript ค่าของสิ่งนี้จะเปลี่ยนไปขึ้นอยู่กับการใช้ฟังก์ชัน แต่มีหลักการอยู่เสมอนั่นคือสิ่งนี้หมายถึงวัตถุที่เรียกฟังก์ชั่น
1. คำจำกัดความ
1. นี่คือวัตถุพิเศษ (หรือการอ้างอิงนี้) ภายในฟังก์ชั่น - มันหมายถึงวัตถุสภาพแวดล้อมที่ฟังก์ชั่นถูกดำเนินการ
2. การอ้างอิงนี้เป็นตัวแปรแบบอ่านอย่างเดียวที่สามารถใช้งานได้ตลอดเวลาในรหัส JavaScript การอ้างอิงการอ้างอิงนี้ (คะแนนเป็น) เป็นวัตถุที่มีคุณสมบัติที่เปลี่ยนแปลงวัตถุอ้างอิงโดยอัตโนมัติตามบริบทของรหัส กฎการอ้างอิงมีดังนี้:
•ในรหัสนอกสุดการอ้างอิงนี้หมายถึงวัตถุระดับโลก
•ภายในฟังก์ชั่นการอ้างอิงนี้แตกต่างกันไปตามวิธีการเรียกฟังก์ชัน ดังนี้
1) การเรียกตัวสร้าง - การอ้างอิงนี้หมายถึงวัตถุที่สร้างขึ้น
2) วิธีการโทร - การอ้างอิงนี้หมายถึงวัตถุตัวรับสัญญาณ
3) สมัครหรือโทร - การอ้างอิงนี้หมายถึงวัตถุที่ระบุด้วยพารามิเตอร์ของการสมัครหรือการโทร
4) วิธีการโทรอื่น ๆ - การอ้างอิงนี้หมายถึงวัตถุทั่วโลก
2. ตามข้อมูลข้างต้นและข้อมูลออนไลน์ที่เกี่ยวข้องสถานะการใช้งานของวัตถุนี้ (อ้างถึง) สรุปได้ดังนี้:
JavaScript เป็นภาษาแบบไดนามิกและเฉพาะเมื่อมีการดำเนินการคำหลักนี้เท่านั้น ดังนั้นสิ่งนี้จะชี้ไปที่ผู้โทรนั่นคือการอ้างอิงถึง "วัตถุโทร" เพื่อนำไปใช้อย่างง่าย ๆ ซึ่งเป็นวัตถุที่เรียกว่าเป็นของซึ่งชี้ไปที่วัตถุนั้น ขึ้นอยู่กับวิธีการเรียกใช้ฟังก์ชันสิ่งนี้สามารถชี้ไปที่วัตถุส่วนกลางวัตถุปัจจุบันหรือวัตถุอื่น ๆ
1. การเรียกใช้ฟังก์ชันทั่วโลกสิ่งนี้ในฟังก์ชั่นทั่วโลกจะชี้ไปที่หน้าต่างวัตถุทั่วโลก (โหมดเรียกใช้ฟังก์ชัน)
// รหัสรายการ 1 <script type = "text/javascript"> var message = "สิ่งนี้ในหน้าต่าง"; // ประโยคนี้เขียนอยู่นอกฟังก์ชั่นและภายในฟังก์ชั่นฟังก์ชั่น func () {if (this == window) {การแจ้งเตือน ("this == window"); การแจ้งเตือน (ข้อความ); this.methoda = function () {Alert ("ฉันเป็นฟังก์ชัน");}}}} func (); // หากไม่เรียกวิธี Func แอตทริบิวต์หรือวิธีการที่กำหนดไว้ในนั้นจะไม่ถูกเรียกคืนโดย Methoda (); </script>ผลลัพธ์ของการโทรของ func () คือหน้าต่างนี้ == หน้าต่างนี้อยู่ในหน้าต่าง
ผลลัพธ์ของการโทรไปยัง Methoda () คือฉันเป็นฟังก์ชัน
2. การเรียกสร้างตัวสร้างนั่นคือการสร้างอินสแตนซ์วัตถุโดยใช้ใหม่สิ่งนี้จะชี้ไปที่วัตถุที่สร้างขึ้นผ่านตัวสร้าง (โหมดการโทรคอนสตรัคเตอร์)
รหัสรายการ 2
<script type = "text/javascript"> function func () {ถ้า (this == window) {alert ("this == window");} else {Alert ("this! = window");} this.fielda = "ฉันเป็นฟิลด์"; // สิ่งนี้ชี้ไปที่วัตถุ obj </script>3. การเรียกวิธีวัตถุซึ่งชี้ไปที่วัตถุปัจจุบัน ฟังก์ชั่นใด ๆ ตราบใดที่ฟังก์ชั่นถูกใช้หรือกำหนดเป็นวิธีการของวัตถุภายในฟังก์ชั่นนี้เป็นการอ้างอิงถึงวัตถุเอง นอกจากนี้ยังสามารถเข้าใจได้ว่าสิ่งนี้เขียนไว้ในวัตถุปกติและชี้ไปที่วัตถุเอง (โหมดการโทรวิธี)
(คำจำกัดความของวิธีการ: ฟังก์ชันเป็นคุณสมบัติวัตถุเรียกว่าวิธี)
// รหัสรายการ 3 <script type = "text/javascript"> var obj = {x: 3, doit: function () {ถ้า (นี่ == หน้าต่าง) {แจ้งเตือน ("นี่ == window");} else {alert ("วิธีการเรียกว่า:" + this.x);}}}; obj.doit (); // สิ่งนี้ชี้ไปที่วัตถุ obj </script>4. โทรหาวิธีนี้ผ่านการสมัครหรือการโทรซึ่งชี้ไปที่วัตถุที่ผ่าน
วิธีการสมัครหรือการโทรสามารถใช้เรียกวิธีการแทนวัตถุอื่น วิธีการโทรเปลี่ยนบริบทวัตถุของฟังก์ชันจากบริบทเริ่มต้นเป็นวัตถุใหม่ที่ระบุโดย Thisobj หากไม่มีการจัดเตรียมพารามิเตอร์ ThisOBJ วัตถุส่วนกลางจะถูกใช้เป็น ThisObj (ใช้โหมดการโทร)
// รหัสรายการ 4 <script type = "text/javascript"> var obj = {x: 3, doit: function () {การแจ้งเตือน ("วิธีการเรียกว่า:" + this.x);}}; var obj2 = {x: 4}; obj.doit (); // 3 สิ่งนี้ชี้ไปที่ objobj.doit.apply (obj2); // 4 สิ่งนี้ชี้ไปที่ obj2obj.doit.call (obj2); // 4 สิ่งนี้ชี้ไปที่ OBJ2 </script>5. สิ่งนี้ในห่วงโซ่ต้นแบบ - วัตถุต้นแบบและสิ่งนี้ในตัวสร้างชี้ไปที่วัตถุอินสแตนซ์ที่สร้างขึ้นใหม่ ใช้วิธีการขยายต้นแบบเพื่อรับอินสแตนซ์ของวัตถุต้นทางโดยใช้สิ่งนี้และไม่สามารถรับฟิลด์ส่วนตัวผ่านห่วงโซ่ต้นแบบ
// รหัสรายการ 5 <script type = "text/javascript"> function func () {this.fielda = "ฉันเป็นฟิลด์"; var privatefielda = "ฉันเป็น var";} func.prototype = {extendMethod: ฟังก์ชั่น (str) {แจ้งเตือน (str + ":" // เกิดข้อผิดพลาดไม่สามารถรับฟิลด์ส่วนตัวผ่านห่วงโซ่ต้นแบบ }}; var obj = new func (); obj.extendmethod ("จากต้นแบบ"); // ที่วัตถุที่ชี้นี้ OBJ ในตัวสร้างและห่วงโซ่ต้นแบบในเวลานี้ OBJ </script>6. สิ่งนี้ในการปิด - ปิด: ฟังก์ชั่นที่เขียนในฟังก์ชั่นซึ่งชี้ไปที่หน้าต่างวัตถุทั่วโลก
6.1 การปิดในวัตถุ
// รหัสรายการ 6 <script type = "text/javascript"> var name = "The Window"; var obj = {ชื่อ: "my object", getNameFunc: function () {return function () {return this.name;}}}; Alert (obj.getNameFunc () (); // หน้าต่าง </script>ในเวลานี้สิ่งนี้ในการปิดจุดไปยังหน้าต่างวัตถุทั่วโลกและสามารถรับคุณสมบัติของวัตถุทั่วโลกเท่านั้น ดังนั้นฉันควรทำอย่างไรถ้าคุณสมบัติภายในวัตถุ (ตัวแปรของฟังก์ชั่นภายนอก) ต้องการเข้าถึง? เพียงบันทึกวัตถุนี้ของฟังก์ชั่นภายนอกในตัวแปรที่สามารถเข้าถึงได้โดยการปิด ดูรหัสต่อไปนี้:
// รหัสรายการ 7 <script type = "text/javascript"> var name = "window"; var obj = {ชื่อ: "my object", getNameFunc: function () {var that = this; return function () {return that.name;}}}; Alert (obj.getNamefunc () // วัตถุของฉัน </script>กำหนดสิ่งนี้ให้กับฟังก์ชั่นภายนอกให้กับตัวแปรนั้นคุณสามารถอ่านตัวแปรของฟังก์ชั่นภายนอก
6.2 ไม่ว่าจะเป็นการอ้างถึงฟังก์ชั่นโดยตรงหรืออินสแตนซ์ฟังก์ชันสิ่งนี้ในฟังก์ชั่นปิดมันจะส่งคืนคะแนนไปยังหน้าต่าง
// รหัสรายการ 8 <script type = "text/javaScript"> ฟังก์ชัน a () {การแจ้งเตือน (this == window); var that = this; var func = function () {การแจ้งเตือน (หน้าต่างนี้ == หน้าต่าง); แจ้งเตือน (นั่น);}; return func;} var b = a (); b (); // true, true, [หน้าต่างวัตถุ] var c = new a (); c (); // false, true, [Object Object] </script>7. ฟังก์ชั่นใช้วิธีการ bind () เพื่อผูกวัตถุและสิ่งนี้จะชี้ไปที่ค่าที่ส่งผ่านไปยังฟังก์ชัน bind ()
// รหัสรายการ 9 <script type = "text/javascript"> window.color = "red"; var obj = {color: "blue"}; ฟังก์ชั่นบอกว่า color () {Alert (this.color);} var objsaycolor = saycolor.bind (obj); objsaycolor (); // blue </script>8. ส่วนสคริปต์ที่ฝังอยู่ในองค์ประกอบ HTML ซึ่งชี้ไปที่องค์ประกอบของตัวเอง
// รหัสรายการ 10 <div onclick = "การทดสอบ (นี้)" id = "div"> คลิกฉัน </div> <script type = "text/javascript"> ฟังก์ชั่นการทดสอบ (obj) {แจ้งเตือน (obj); // [Object htmldivelement]} </script>9. เขียนในแท็กสคริปต์: สิ่งนี้หมายถึงหน้าต่างวัตถุทั่วโลก นี่เป็นเช่นเดียวกับตัวแปรส่วนกลางที่เรียกโดยฟังก์ชั่นทั่วโลก ณ จุดแรก
ข้างต้นเป็นคำพูดจากสิ่งนี้ใน JavaScript ที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!