ใน JavaScript ชนิดข้อมูลส่วนใหญ่แบ่งออกเป็นประเภทดั้งเดิมและประเภทอ้างอิง ประเภทการอ้างอิงทั้งหมดมาจากสำเนาของวัตถุ บทความนี้เป็นการแนะนำฟังก์ชั่นที่ซ่อนอยู่ของวัตถุวัตถุที่นำมาให้คุณโดยบรรณาธิการของช่องทางเทคโนโลยีข้อผิดพลาดใหม่ มาดูกันเถอะ!
คุณสมบัตินี้ถูกกำหนดไว้ในต้นแบบของคลาส หลังจากสร้างอินสแตนซ์ของวัตถุจะสามารถเรียกได้โดยอินสแตนซ์ของวัตถุผ่านห่วงโซ่ __proto__ และชี้ไปที่ตัวสร้างของคลาสปัจจุบัน สิ่งนี้สามารถกำหนดคลาสของวัตถุที่เป็นของ (ไม่เหมือนอินสแตนซ์ของอินสแตนซ์ของไม่ จำกัด เฉพาะคลาสที่วัตถุเป็นของโดยตรงแม้คลาสแม่จะส่งคืนจริง)
[ตัวอย่าง]
Trace (Object.prototype.constructor == Object); // เอาต์พุตจริง
var a = วัตถุใหม่ ();
ติดตาม (A.Constructor == วัตถุ); // เอาต์พุตจริง
var b = new Array ();
ติดตาม (B.Constructor == อาร์เรย์); // เอาต์พุตจริง
ติดตาม (b.Constructor == วัตถุ); // เอาต์พุตเท็จ
ติดตาม (b วัตถุอินสแตนซ์ b); // เอาต์พุตจริง
คุณสมบัติ: Object .__ Constructor__
ฟังก์ชั่นคุณสมบัตินี้คล้ายกับ Object.constructor ความแตกต่างคือมันไม่ได้ถูกกำหนดไว้ในต้นแบบของคลาส แต่แนบกับอินสแตนซ์ของวัตถุเมื่อสร้างอินสแตนซ์ของวัตถุ ในเวลาเดียวกันคุณสมบัตินี้เรียกว่าโดยปริยายเมื่อใช้โดยคำหลัก Super เป็นตัวสร้างคลาสหลักและใช้เพื่อชี้ไปที่ตัวสร้างคลาสแม่นั่นคือ Super (... ) เทียบเท่ากับตัวสร้าง. __ __. call (นี่, ... )
[ตัวอย่าง]
Trace (Object.prototype .__ Constructor__ == วัตถุ); // เอาต์พุตเท็จ
var a = วัตถุใหม่ ();
ติดตาม (a .__ constructor__ == วัตถุ); // เอาต์พุตจริง
var b = new Array ();
ติดตาม (b .__ constructor__ == อาร์เรย์); // เอาต์พุตจริง
ติดตาม (b .__ constructor__ == วัตถุ); // เอาต์พุตเท็จ
วิธีการ: Object.isprototypeof (ClassFunc)
วิธีนี้ใช้เพื่อตรวจสอบว่าวัตถุปัจจุบันอยู่ในห่วงโซ่ __proto__ ของ Object OBJ หรือไม่ วิธีนี้สามารถใช้เพื่อพิจารณาว่าคลาสเป็นผู้ปกครองหรือลูกของชั้นเรียนอื่นหรือไม่
[ตัวอย่าง]
trace (object.prototype.isprototypeof (วัตถุใหม่ ())); // เอาต์พุตจริง
trace (object.prototype.isprototypeof (array ใหม่ ())); // เอาต์พุตจริง
trace (array.prototype.isprototypeof (วัตถุใหม่ ())); // เอาต์พุตเท็จ
trace (object.prototype.isprototypeof (array.prototype)); // ตัดสินว่าวัตถุนั้นเป็นคลาสแม่ของอาร์เรย์หรือไม่เอาต์พุตจริง
วิธีการ: Object.ispropertyenumerable (Propname)
วิธีนี้ใช้เพื่อตรวจสอบว่าสมาชิกชื่อ Propname มีอยู่ในวัตถุปัจจุบันและสามารถระบุได้ (ใช้สำหรับ .. ใน) กล่าวอีกนัยหนึ่งไม่ว่าจะมองเห็นได้หรือไม่
[ตัวอย่าง]
var a = {x: 1, y: 2};
assetPropFlags (a, ["y"], 1); // set y ไม่สามารถมองเห็นได้
ติดตาม (AY); // เฉพาะเอาต์พุต 2
สำหรับ (var i ใน a) trace (i); // เฉพาะเอาต์พุต x
ติดตาม (a.ispropertyenumerable ("x")); // เอาต์พุตจริง
ติดตาม (a.ispropertyenumerable ("y")); // เอาต์พุตเท็จ
วิธีการ: Object.hasownproperty (Propname)
วิธีนี้ใช้เพื่อตรวจสอบว่าสมาชิกชื่อ Propname เป็นสมาชิกของวัตถุปัจจุบันหรือไม่แทนที่จะอ้างอิงจากต้นแบบของคลาสผ่านห่วงโซ่ __proto__
[ตัวอย่าง]
การทดสอบฟังก์ชั่น () {}
test.prototype.x = 1;
var a = การทดสอบใหม่ ();
AY = 2;
ร่องรอย (ขวาน); // เอาท์พุท 1
ติดตาม (A.HasownProperty ("x")); // เอาต์พุตเท็จ
ติดตาม (AY); // เอาท์พุท 2
ติดตาม (A.HasownProperty ("y")); // เอาต์พุตจริง
วิธี: Object.toString ()
วิธีนี้สามารถกำหนดผลลัพธ์สตริงที่สร้างโดยวัตถุเมื่อแปลงเป็นประเภทสตริงซึ่งโดยทั่วไปจะถูกกำหนดไว้ในต้นแบบคลาส
[ตัวอย่าง]
จุดฟังก์ชัน (x, y) {
this.x = x;
this.y = y;
-
point.prototype.toString = function () {
return "[x:" + this.x + ", y:" + this.y + "]";
-
var pos = จุดใหม่ (10, 20);
ติดตาม ("ตำแหน่งคือ" + pos); // ตำแหน่งเอาท์พุทคือ [x: 10, y: 20]
ข้างต้นเป็นการแนะนำฟังก์ชั่นที่ซ่อนอยู่ของวัตถุวัตถุ ฉันเชื่อว่าทุกคนมีความเข้าใจที่ชัดเจน ความรู้เพิ่มเติมเกี่ยวกับช่องทางเทคนิคอยู่ในช่องทางเทคโนโลยีใหม่ที่ไม่ถูกต้อง!