คำอธิบายในความคิดเห็นมีรายละเอียดมากดังนั้นฉันจะไม่พูดเรื่องไร้สาระมากที่นี่เพียงป้อนรหัส:
<script type = "text/javascript"> // ecma-262 กำหนดวัตถุเป็น: "คอลเลกชันของแอตทริบิวต์ที่ไม่ได้เรียงลำดับซึ่งแอตทริบิวต์สามารถมีค่าพื้นฐานวัตถุหรือฟังก์ชั่น" // วิธีที่ง่ายที่สุดในการทำความเข้าใจวัตถุคือการสร้างอินสแตนซ์ของวัตถุและเพิ่มแอตทริบิวต์ person.name = "xulei"; person.age = "23"; person.job = "วิศวกรส่วนหน้า"; person.sayname = function () {Alert (this.name); } // คุณสามารถเขียน var person = {ชื่อ: "xulei", อายุ: 23, งาน: "วิศวกรรม front-end", sayname: function () {Alert (this.name)}} // 1 ประเภทแอตทริบิวต์: แอตทริบิวต์ข้อมูลและเข้าถึงแอตทริบิวต์ // 1 แอตทริบิวต์ข้อมูลมี 4 ลักษณะที่อธิบายพฤติกรรมของมัน // [กำหนดค่า]: ระบุว่าแอตทริบิวต์สามารถลบเพื่อกำหนดแอตทริบิวต์ใหม่ไม่ว่าแอตทริบิวต์สามารถแก้ไขได้หรือไม่หรือแอตทริบิวต์สามารถปรับเปลี่ยนแอตทริบิวต์ได้หรือไม่ เป็นจริง // [ค่า]: มีค่าข้อมูลของแอตทริบิวต์นี้ ค่าเริ่มต้นคือ person var ที่ไม่ได้กำหนด = {name: "xulei"} // วัตถุบุคคลถูกสร้างขึ้นที่นี่และค่าค่าคือ "xulei" // เพื่อแก้ไขคุณสมบัติเริ่มต้นของคุณสมบัติวัตถุของ ecmascript5 defineproperty (วัตถุที่มีค่าพร็อพ Object.defineProperty (Peron, "Name", {Writable: False, // คุณสมบัติไม่สามารถแก้ไขได้: "Xu Lei-Xulei"}); การแจ้งเตือน (peron.name); // xu lei-xulei peron.name = "xu lei"; การแจ้งเตือน (peron.name); // xu lei-xulei // การดำเนินการข้างต้นจะถูกละเว้นในโหมดที่ไม่ใช่ Strict หากข้อยกเว้นถูกโยนลงในโหมดที่เข้มงวด // เมื่อแอตทริบิวต์ถูกกำหนดให้เป็นสิ่งที่ไม่สามารถปรับได้ก็จะไม่สามารถเปลี่ยนกลับเป็นแบบกำหนดค่าได้ // ในกรณีส่วนใหญ่ไม่จำเป็นต้องใช้คุณลักษณะขั้นสูงเหล่านี้ที่จัดทำโดย method.defineProperty () แต่มันมีประโยชน์มากสำหรับการทำความเข้าใจ JavaScript // ผู้อ่านไม่ควรใช้วิธีนี้ใน IE8 // 2. การเข้าถึงคุณสมบัติของมันมี 4 ลักษณะ // [กำหนดค่า]: ระบุว่าแอตทริบิวต์สามารถลบเพื่อกำหนดแอตทริบิวต์ใหม่ไม่ว่าคุณลักษณะของแอตทริบิวต์สามารถแก้ไขได้หรือไม่หรือไม่หรือว่าแอตทริบิวต์สามารถปรับเปลี่ยนแอตทริบิวต์ได้ // [set]: ค่าเริ่มต้นของฟังก์ชั่นที่เรียกว่าเมื่อเขียนแอตทริบิวต์ที่ไม่ได้กำหนด var book = {_year: 2004, edition: 1} object.defineproperty (หนังสือ, "ปี", {get: function () {return this._year;}, set: function (ค่า) - Book.year = 2005; การแจ้งเตือน (book.edition); // 2 // สร้างวัตถุ // 1 ปฏิบัติต่อตัวสร้างเป็นคนฟังก์ชั่น (ชื่อ, อายุ, งาน) {this.name = name; this.age = อายุ; this.job = งาน; this.sayName = function () {Alert (this.name); }} // ใช้ var person = บุคคลใหม่ ("xulei", 23, "ซอฟต์แวร์"); Person.SayName (); // ใช้บุคคล ("xulei2", 23, "job2"); // เพิ่มลงใน window.sayname (); // การโทร var ในขอบเขตของวัตถุอื่น o = วัตถุใหม่ (); person.call (o, "xulei3", 23, "Job3"); O.SayName (); </script>มามีย่อหน้าอื่น:
<script type = "text/javascript"> // 1 เข้าใจวัตถุต้นแบบ // 2 ต้นแบบและในโอเปอเรเตอร์ // 3 ไวยากรณ์ต้นแบบง่ายขึ้น // 4 พลวัตของต้นแบบ // 5 ต้นแบบวัตถุดั้งเดิม // 6 ปัญหาเกี่ยวกับวัตถุต้นแบบ // 1 เมื่อใดก็ตามที่มีการสร้างฟังก์ชั่นแอตทริบิวต์ต้นแบบจะถูกสร้างขึ้นสำหรับฟังก์ชั่นตามชุดของกฎเฉพาะ แอตทริบิวต์นี้ชี้ไปที่วัตถุต้นแบบของฟังก์ชั่น // โดยค่าเริ่มต้นวัตถุต้นแบบทั้งหมดจะได้รับแอตทริบิวต์คอนสตรัคเตอร์ (คอนสตรัคเตอร์) โดยอัตโนมัติซึ่งมีตัวชี้ไปยังฟังก์ชั่นที่แอตทริบิวต์ต้นแบบจะอยู่ในตำแหน่ง // โดยค่าเริ่มต้น สำหรับวิธีอื่น ๆ พวกเขาจะได้รับการสืบทอดมาจาก object.//wen การโทรเพื่อสร้างอินสแตนซ์ใหม่อินสแตนซ์มีตัวชี้ (คุณสมบัติภายใน) เพื่อชี้ไปที่วัตถุต้นแบบของ constructor.//in firefox, Safari และ Chrome, property_proto_access var p1 = บุคคลใหม่ (); การแจ้งเตือน (person.prototype.isprototypeof (P1)) การแจ้งเตือน (Object.getPrototypeof (P1) == person.prototype) // แม้ว่าค่าที่บันทึกไว้ในต้นแบบสามารถเข้าถึงได้ผ่านอินสแตนซ์ของวัตถุ หากเราเพิ่มคุณสมบัติ // ลงในอินสแตนซ์และชื่อของคุณสมบัติเหมือนกับอินสแตนซ์ในต้นแบบเราจะสร้างคุณสมบัติในอินสแตนซ์และคุณสมบัติจะบล็อกคุณสมบัติในต้นแบบ เช่น: function person () {} person.prototype.name = "Amber"; person.prototype.age = 23; person.prototype.job = "วิศวกรซอฟต์แวร์"; person.prototype.sayname = function () {alert (this.name)} var person1 = บุคคลใหม่ (); var person2 = คนใหม่ (); person1.name = "amber.xu"; การแจ้งเตือน (person1.name); // amber.xu -การแจ้งเตือนอินสแตนซ์จาก from (person2.name); // Amber -จากต้นแบบการลบ Person1.name; การแจ้งเตือน (person1.name); // Amber -จากต้นแบบ // ใช้วิธี HASOWNPROPERTY () เพื่อตรวจสอบว่ามีคุณสมบัติอยู่ในอินสแตนซ์หรือในต้นแบบ วิธีนี้ (สืบทอดมาจากวัตถุ) // ส่งคืนฟังก์ชั่นจริง () {} person.prototype.name = "Amber"; person.prototype.age = 23; person.prototype.job = "วิศวกรซอฟต์แวร์"; person.prototype.sayname = function () {alert (this.name)} var person1 = บุคคลใหม่ (); var person2 = คนใหม่ (); การแจ้งเตือน (person1.hasownproperty ("ชื่อ")); // เท็จจากการแจ้งเตือนอินสแตนซ์ (person2.hasownproperty ("ชื่อ")); // เท็จจากอินสแตนซ์ person1.name = "amber.xu"; การแจ้งเตือน (person1.name); การแจ้งเตือน (person1.hasownproperty ("ชื่อ")); // จริงจากอินสแตนซ์ลบ person1.name; การแจ้งเตือน (person1.name); การแจ้งเตือน (person1.hasownproperty ("ชื่อ")); // เท็จจากต้นแบบ // 2 ต้นแบบและในตัวดำเนินการ // ในนั้นมีสองวิธีในการใช้งานหนึ่งถูกใช้แยกกันและในสำหรับสำหรับ เมื่อใช้เพียงอย่างเดียวตัวดำเนินการในตัวดำเนินการจะส่งคืนจริงเมื่อวัตถุสามารถเข้าถึงคุณสมบัติที่กำหนด // ไม่ว่าคุณสมบัติมาจากต้นแบบหรือฟังก์ชันอินสแตนซ์ () {} person.prototype.name = "Amber"; person.prototype.age = 23; person.prototype.job = "วิศวกรซอฟต์แวร์"; person.prototype.sayname = function () {alert (this.name)} var person1 = บุคคลใหม่ (); var person2 = คนใหม่ (); การแจ้งเตือน ("ชื่อ" ใน person1); // true จากการแจ้งเตือนต้นแบบ ("ชื่อ" ใน person2); // true จากการแจ้งเตือนต้นแบบ ("ความสูง" ใน person1); // false // วิธีนี้คุณสามารถห่อหุ้มฟังก์ชั่น (ไม่ว่าคุณสมบัติที่กำหนดไว้ วัตถุ); } การแจ้งเตือน ("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- คุณสมบัติที่สามารถเข้าถึงได้ที่สามารถเข้าถึงได้ผ่านวัตถุรวมถึงคุณสมบัติต้นแบบและอินสแตนซ์ // eg: var o = {toString: function () {return "my object";}}; ยอมรับวัตถุเป็นอาร์กิวเมนต์ // อาร์เรย์สตริงที่มีฟังก์ชันคุณสมบัติคุณสมบัติทั้งหมด () {} person.prototype.name = "Amber"; person.prototype.age = 23; person.prototype.job = "วิศวกรซอฟต์แวร์"; person.prototype.sayname = function () {alert (this.name)} var person1 = บุคคลใหม่ (); var person2 = คนใหม่ (); var keys = object.keys (person.prototype); การแจ้งเตือน (ปุ่ม) person1.name = "amber.xu"; person1.age = 23; var keys = object.keys (person1); การแจ้งเตือน (กุญแจ) เตือน("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - ชื่อ: "Amber", อายุ: 23, Job: "ซอฟต์แวร์", Sayname: function () {Alert (this.name)}} // หลังจากเขียนสิ่งนี้แอตทริบิวต์คอนสตรัคเตอร์ไม่ได้ชี้ไปที่ฟังก์ชั่นของบุคคลอีกต่อไป บุคคล) // การแจ้งเตือนที่แท้จริง (อินสแตนซ์เพื่อนของวัตถุ) // การแจ้งเตือนที่แท้จริง (friend.constructor == บุคคล); // การแจ้งเตือนเท็จ (เพื่อน. constructor == วัตถุ); // true // ถ้า constructor สำคัญสำหรับคุณคุณสามารถตั้งค่าให้เป็นค่าที่เหมาะสม sayname: function () {alert (this.name)}} var friend = คนใหม่ (); การแจ้งเตือน ("ตั้งค่าด้วยตนเอง ตัวสร้าง -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // ในกรณีนี้คุณสามารถใช้ object.defineproperty (person.prototype, "constructor", {enumerable: false, value: person}); ความสัมพันธ์การเชื่อมต่อที่หลวมระหว่างอินสแตนซ์และต้นแบบการเชื่อมต่อระหว่างอินสแตนซ์และต้นแบบเป็นเพียงตัวชี้ไม่ใช่สำเนา // เมื่อเราเรียกวิธี Sayhi () เราจะค้นหาวิธีการที่ชื่อ Sayhi ในอินสแตนซ์และค้นหาต้นแบบหากไม่พบ // อย่างไรก็ตามหากคุณเขียนวัตถุต้นแบบทั้งหมดใหม่สถานการณ์จะแตกต่างกัน // เรารู้ว่าเมื่อเรียกคอนสตรัคเตอร์ตัวชี้ต้นแบบไปยังต้นแบบต้นแบบดั้งเดิมจะถูกเพิ่มลงในอินสแตนซ์และการปรับเปลี่ยนต้นแบบไปยังวัตถุอื่นจะเทียบเท่ากับการตัดการเชื่อมต่อระหว่างตัวสร้างและต้นแบบดั้งเดิม // โปรดจำไว้ว่า: ตัวชี้ในอินสแตนซ์ชี้ไปที่ต้นแบบเท่านั้นไม่ใช่ไปยังตัวสร้าง เช่น: ฟังก์ชั่น a () {} var a1 = new a (); a.prototype = {constructor: a, ชื่อ: "Amber", อายุ: 23, Job: "ซอฟต์แวร์", sayname: function () {alert (this.name)}} การแจ้งเตือน ("ข้อผิดพลาด -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ประเภทการอ้างอิงดั้งเดิมถูกสร้างขึ้นโดยใช้รูปแบบนี้ string.prototype.startswith = function (text) {return.indexof (text) == 0; - var msg = "hello"; การแจ้งเตือน (msg.startswith ("H")); // เราไม่แนะนำให้ทำสิ่งนี้ การแจ้งเตือน ("ปัญหาต้นแบบกับวัตถุต้นแบบ"); // 6. ตัวอย่างฟังก์ชั่นต้นแบบ () {} ques.prototype = {constructor: ques, ชื่อ: "อำพัน", อายุ: 23, งาน: "มัน", เพื่อน: ["จางซาน", "li si"], // ประเภทอ้างอิง var q1 = ques ใหม่ (); var q2 = ques ใหม่ (); Q1.Friends.push ("Wang Wu"); การแจ้งเตือน (q1.friends); // alert (q2.friends); // alert (q1.friends === q2.friends); // ฉันเชื่อว่าทุกคนเห็นปัญหา เมื่อฉันสร้างสองอินสแตนซ์ Q1 และ Q2 และเมื่อฉันเพิ่ม "Wang Wu" ให้กับ "เพื่อน" ของ Q1 "เพื่อน" ของ Q2 ก็มีสาม "วัง San, Li Si และ Wang Wu // นั่นเป็นเพราะอาร์เรย์มีอยู่ในคำถามบทความนี้จะจบลงที่นี่ เราจะยังคงหารือเกี่ยวกับการเขียนโปรแกรมเชิงวัตถุของ JavaScript ในอนาคต ฉันหวังว่าทุกคนจะชอบมัน