วันก่อนมีชาวเน็ตฝากข้อความมาถามว่า Object คืออะไร? เนื่องจากฉันยุ่งอยู่กับการสร้างตัวควบคุม TreeView ขึ้นมาใหม่ในช่วงสองวันที่ผ่านมา ฉันเสียใจจริงๆ ที่ฉันตอบกลับไม่ทันเวลา ใช้เวลาวันนี้เพื่อดูว่า Object ใน JavaScript คืออะไรกันแน่? ความสัมพันธ์ระหว่าง Object และ Function คืออะไร? ฉันยินดีแก้ไขหากฉันผิด
แม้ว่าจะเป็นข้อความส่วนตัว แต่ฉันหวังว่าคุณจะไม่ตำหนิฉันหากคุณส่งโดยไม่ระบุชื่อ หากมีอะไรผิดพลาดโปรดแจ้งให้เราทราบ
Object ของ js คืออะไรกันแน่?
ตอนแรกฉันคิดว่า Object เป็นต้นแบบของวัตถุทั้งหมดใน js
แต่: alert(Object.constructor) แสดงฟังก์ชัน Function...
หมายความว่าต้นแบบของ Object คือ Function?
แต่ปัญหาก็กลับมาอีกครั้ง:
Function.prototype.read=function();{};//ต้นแบบฟังก์ชันขยาย
for(var i in Object)alert(i)//แสดงการอ่าน ซึ่งยืนยันเพิ่มเติมว่าต้นแบบของ Object คือ Function
Object.prototype.read=function(){};//ขยายต้นแบบของ Object
สำหรับ (var i in Function)alert(i)//Display read ต้นแบบของ Function คือ Object? - - -
Object คืออะไรกันแน่? Object และ Function เป็นคลาสเดียวกันหรือไม่
เพื่อนคนนี้สับสน Constructor, Prototype และ Function เนื่องจาก JavaScript เป็นภาษาแบบ Object-based (JavaScript ไม่มีคลาสที่เหมาะสม) จริงๆ แล้วเป็นไปได้ที่จะพูดได้ว่า Object เป็นต้นแบบของ Object ทั้งหมด แต่สิ่งนี้หมายถึงแนวคิดของต้นแบบในรูปแบบ Prototype ในรูปแบบการออกแบบ ไม่ใช่คุณลักษณะภาษาต้นแบบของ JavaScript ที่เรียกว่า Object.prototype
แล้ว Object ใน JavaScript คืออะไรกันแน่? Script56.chm (บทช่วยสอน M$ อย่างเป็นทางการ) พูดว่า: จัดเตรียมฟังก์ชันทั่วไปสำหรับวัตถุ JScript ทั้งหมด เข้าใจไหม? เพราะควรจะเข้าใจแต่ก็ยังดูไม่เข้าใจ @_@ หากเราดูที่โครงสร้างข้อมูล ออบเจ็กต์ (อินสแตนซ์ของออบเจ็กต์) คือคอลเลกชันที่ไม่เรียงลำดับ โครงสร้างที่คล้ายกับแมปใน C++, แฮชเทเบิลใน C# และแฮชแมปใน Java และมันมีค่าดั้งเดิมที่กำหนดโดยระบบภาษา JavaScript มันหมายความว่าอะไร? Object มีเมธอดที่เรียกว่า valueOf ฟังก์ชันของมันคือส่งคืนค่าดั้งเดิมของอ็อบเจ็กต์ที่ระบุ นอกจากนี้ยังสามารถพบได้ใน Script56 และยังมีตารางที่แสดงรายการผลลัพธ์ valueOf ที่ส่งคืนของอ็อบเจ็กต์ระบบ กล่าวอีกนัยหนึ่ง วัตถุเช่น Array, Boolean, Date, Function, Number ฯลฯ จริงๆ แล้วทั้งหมดมาจาก Object และบรรพบุรุษของพวกมันล้วนเป็น Object พวกมันแสดงถึงคุณสมบัติทางภาษาที่แตกต่างกัน ตัวอย่างเช่น Array มีแอตทริบิวต์ความยาวที่ได้รับการจัดการโดยอัตโนมัติ Boolean มีเพียงค่าจริงหรือเท็จ Date แสดงถึงโครงสร้างเวลา และสามารถเรียกใช้ Function เหล่านี้คือความสามารถทั้งหมดที่กำหนดให้กับพวกเขาตามประเภทดั้งเดิม (valueOf ). จริงๆ แล้ว Object เป็นเพียงแนวคิด ภาษา JavaScript นั้นมีพื้นฐานมาจาก Object ซึ่งหมายความว่าประเภทบิวท์อินทั้งหมดจะถูกแยกออกจากชุดของวิธีการและคุณสมบัติทั่วไป (เรียกอีกอย่างว่าพฤติกรรมและสถานะ) ลองจินตนาการถึงสิ่งหนึ่งที่มีเพียง ลักษณะเหล่านี้คือวัตถุ ในความเป็นจริง Object ไม่ได้มีประโยชน์มากนักในการเขียนโปรแกรม เราทุกคนใช้ instance object ของ Object แล้วใช้คุณสมบัติการรวบรวมของ Object (expando) เพื่อขยาย object ให้กลายเป็นสิ่งที่เราต้องการ สำหรับ Object.prototype จริงๆ แล้วมันไม่มีประโยชน์มากนัก เนื่องจากแต่ละประเภทมีต้นแบบของตัวเอง และวิธีการสร้างต้นแบบส่วนใหญ่ที่เราเพิ่มนั้นใช้สำหรับบางประเภท
นอกจากต้นแบบแล้ว Object ยังมีคุณลักษณะที่สำคัญมากอีกด้วย นั่นก็คือตัวสร้าง สิ่งนี้ถูกใช้เพื่อขยายออบเจ็กต์ที่ฉันกล่าวถึงก่อนหน้านี้ให้เสร็จสมบูรณ์ นอกจากนี้ยังเป็นพื้นฐานสำหรับเราในการใช้ JavaScript เพื่อจำลอง OOP เนื่องจากทุกอย่างใน JavaScript นั้นเป็น Object ดังนั้น Constructor ก็เช่นกัน แต่ประเภทดั้งเดิมคือ Function (รัน Object.constructor.valueOf() เพื่อรับ: function Function() { [native code] }) แน่นอนว่า ในทางกลับกัน ไม่ใช่ว่าออบเจ็กต์ JavaScript ทั้งหมดจะมีแอตทริบิวต์ Constructor และออบเจ็กต์บิวท์อินบางรายการก็ไม่มี Constructor
เกี่ยวกับความสัมพันธ์ระหว่าง Object และ Function ฉันคิดว่านี่ไม่ใช่โค้ดทดสอบที่ดี: Function.prototype.read=function(){};//Extensed Function Prototype
for(var i in Object)alert(i)//แสดงการอ่าน ซึ่งยืนยันเพิ่มเติมว่าต้นแบบของ Object คือ Function
Object.prototype.read=function(){};//ขยายต้นแบบของ Object
สำหรับ (var i in Function)alert(i)//Display read ต้นแบบของ Function คือ Object?
โค้ดสี่บรรทัดนี้ใช้เพื่ออธิบายหลักการของต้นแบบของ JavaScript และจำลองวิธีการสืบทอดต้นแบบของการเขียนโปรแกรม OO ซึ่งค่อนข้างเซ็กซี่ อย่างไรก็ตาม ไม่สามารถอธิบายความสัมพันธ์ระหว่าง Object และ Function ได้อย่างชัดเจน (ในทางกลับกัน พวกมันจะหลอก ผู้ชม
มาอธิบายสั้น ๆ เกี่ยวกับฟังก์ชันต่าง ๆ ใน JavaScript กัน:
วัตถุดั้งเดิม: วัตถุที่จัดทำโดยภาษา JavaScript ที่ไม่ขึ้นอยู่กับโฮสต์การดำเนินการ บางส่วนเป็นวัตถุในตัว เช่น Global และ Math; บางส่วนถูกสร้างขึ้นและใช้ในสภาพแวดล้อมการทำงานของสคริปต์ เช่น: Array, Boolean , วันที่, ฟังก์ชัน, ตัวเลข, วัตถุ, RegExp, ข้อผิดพลาด
วัตถุในตัว: วัตถุในตัวที่จัดทำโดยภาษา JavaScript ที่ไม่ขึ้นอยู่กับโฮสต์การดำเนินการ เช่น ทั่วโลกและคณิตศาสตร์ วัตถุในตัวล้วนเป็นวัตถุดั้งเดิม
วัตถุโฮสต์: วัตถุใด ๆ ที่จัดทำโดยภาษา JavaScript ซึ่งขึ้นอยู่กับสภาพแวดล้อมของโฮสต์ วัตถุที่ไม่ใช่เจ้าของภาษาทั้งหมดเป็นวัตถุโฮสต์ เช่น: หน้าต่างใน IE, อินสแตนซ์ wscript ใน WScript, คลาสที่ผู้ใช้สร้างขึ้น