1. ความรู้สำรอง:
1. ฟังก์ชั่นที่ระบุชื่อแอตทริบิวต์:
(1) สำหรับ ... ใน: คุณสามารถสำรวจคุณสมบัติทั้งหมดที่ระบุได้ในวัตถุ (รวมถึงคุณสมบัติของตัวเองและคุณสมบัติที่สืบทอดมา) ในร่างกายลูป
(2) Object.keys (): ส่งคืนอาร์เรย์ (แอตทริบิวต์ที่ระบุได้)
(3) Object.getOwnPropertyNames (): คุณสมบัติทั้งหมดของตัวเอง
3. คุณสมบัติของแอตทริบิวต์: คุณลักษณะข้อมูลและแอตทริบิวต์ accessor
(1) แอตทริบิวต์ข้อมูล: ค่าที่สามารถกำหนดค่าได้
แอตทริบิวต์ข้อมูลมีค่าง่ายๆเพียงอย่างเดียว
(2) แอ็ตทริบิวต์อุปกรณ์เสริม: เขียน (ตั้ง), อ่าน (รับ), enumerable, confexable สามารถกำหนดค่าได้
อุปกรณ์เสริมไม่สามารถเขียนได้ (เช่นไม่มีคุณสมบัติที่เขียนได้)
หากแอตทริบิวต์มีวิธีการตั้งค่าแอตทริบิวต์นี้สามารถเขียนได้และมีวิธีการรับคุณลักษณะนี้สามารถอ่านได้
4. วิธีการกำหนดคุณสมบัติของแอตทริบิวต์: Object.defineProperty (วัตถุ, แอตทริบิวต์, descriptor Object)
5. รับวัตถุ descriptor ของคุณสมบัติ: object.getownpropertydescriptor (วัตถุ, คุณสมบัติ)
2. ตัวอย่าง
1. ตามการใช้งานของ ... ในเราสามารถเขียนวิธีการจำลอง "มรดก"::
<script type = "text/javascript"> var child = {}; var mother = {ชื่อ: "zhangzhiying", lastage: 21, เพศ: "หญิง"}; ฟังก์ชั่นขยาย (เป้าหมาย, แหล่งที่มา) {สำหรับ (var p ในแหล่งที่มา) {เป้าหมาย [p] = แหล่งที่มา [p]; } คืนเป้าหมาย; } ขยาย (เด็กแม่); console.log (เด็ก); // <strong> Object {ชื่อ: "Zhangzhiying", Lastage: 21, Sex: "Female"} </strong> </strip Script> </strong>2. ใช้ในการวนซ้ำผ่านคุณสมบัติของวัตถุต้นแบบจากนั้นกำหนดค่าให้กับวัตถุว่างของเราทีละคนดังนั้นจึงตระหนักถึง "การสืบทอด" ความคิดนี้ถูกต้องมาก มาแก้ไขตัวอย่างข้างต้น:
<script type = "text/javascript"> var child = {}; var mother = {name: "zhangzhiying", lastage: 21, <strong> ตั้งค่าอายุ (ค่า) {this.lastage = value; } รับ Age () {return this.lastage+1; }, </strong> เพศ: "หญิง"}; <br> <br> <strong> mother.age = 15; </strong> // มีวิธีการตั้งค่าซึ่งมีฟังก์ชั่นการเขียนขยาย (เป้าหมาย, แหล่งที่มา) {สำหรับ (var p ในแหล่งที่มา) {เป้าหมาย [p] = แหล่งที่มา [p]; } คืนเป้าหมาย; } ขยาย (เด็กแม่); console.log (เด็ก); // <strong> วัตถุ {ชื่อ: "Zhangzhiying", Lastage: 15, อายุ: 16, Sex: "Female"} </strong> </script>คุณจะเห็นว่ามีการใช้ชุดคู่ในรหัสรับ; เมื่ออายุเป็นแอตทริบิวต์ accessor
ผลลัพธ์ของการรัน: วัตถุปกติที่ไม่มีชุดได้รับ
สรุป: "มรดก" ที่ดำเนินการโดยในไม่จัดการกับชุดและรับ แต่จะแปลงแอตทริบิวต์ accessor (อายุ) เป็นแอตทริบิวต์ข้อมูลแบบคงที่
3. ตั้งค่าคุณลักษณะข้อมูลสำหรับวัตถุแม่
<script type = "text/javascript"> var child = {}; var mother = {name: "zhangzhiying", lastage: 21, ตั้งค่าอายุ (ค่า) {this.lastage = value; } รับ Age () {return this.lastage+1; }, เพศ: "หญิง"}; Object.defineProperty (แม่, "Lastage", {เขียนได้: false}); // ตั้งค่า Lastage เป็นแม่ที่ไม่สามารถเขียนได้ age = 15; // ตั้งค่าไม่ถูกต้องเนื่องจากค่าของ Lastage ยังคงไม่เปลี่ยนแปลง LASTAGE+1 ยังคงไม่เปลี่ยนแปลงนั่นคืออายุยังคงไม่เปลี่ยนแปลงฟังก์ชั่นขยาย (เป้าหมาย, แหล่งที่มา) {สำหรับ (var P ในแหล่งที่มา) {เป้าหมาย [p] = แหล่งที่มา [P]; } คืนเป้าหมาย; } ขยาย (เด็กแม่); console.log (เด็ก); // Object {ชื่อ: "Zhangzhiying", Lastage: 21, อายุ: 22, Sex: "Female"} child.lastage = 12; // ผลการวิจัยแสดงให้เห็นว่าการเปลี่ยนแปลง Lastage ซึ่งบ่งบอกว่าเด็กความว่างเปล่าไม่ได้ "สืบทอด" คุณลักษณะของ mother.lastage มาใช้วิธี getownpropertydesriptor () เพื่อยืนยัน <br> console.log (object.geto<em id = __ mcedel> </script> </em>
สรุป: เพื่อให้บรรลุการสืบทอดเรายังต้องแก้ปัญหา -> คุณลักษณะแอตทริบิวต์ "มรดก"
4. เวอร์ชันสมบูรณ์
<script type = "text/javascript"> var child = {}; var mother = {name: "zhangzhiying", lastage: 21, ตั้งค่าอายุ (ค่า) {this.lastage = value; } รับ Age () {return this.lastage+1; }, เพศ: "หญิง"}; Object.defineProperty (แม่, "Lastage", {เขียนได้: false}); mother.age = 15; <span style = "สี: #333399"> <strong> ฟังก์ชั่นขยาย (เป้าหมาย, แหล่งที่มา) {var names = object.getOwnPropertyNames (แหล่งที่มา); // รับชื่อคุณสมบัติทั้งหมดสำหรับ (var i = 0; i <names.length; i ++) {ถ้า (ชื่อ [i] ในเป้าหมาย) ดำเนินการต่อ; // หากคุณสมบัตินี้มีอยู่ให้ข้าม (ในการสืบทอดต้นแบบหากแอตทริบิวต์ของคุณสมบัติของตัวเองและคุณสมบัติของวัตถุต้นแบบถูกทำซ้ำให้เก็บคุณสมบัติของตัวเอง) var desc = object.getownpropertydescriptor (แหล่งที่มาชื่อ [i]); // รับวัตถุ descriptor ของแอตทริบิวต์แม่ (นั่นคือชุดของคุณสมบัติแอตทริบิวต์แสดงโดยวัตถุ descriptor ใน es5) วัตถุ defineproperty (เป้าหมายชื่อ [i], desc); // รับวัตถุ descriptor ของแม่ไปยังนิยามแอตทริบิวต์ของเด็ก} คืนเป้าหมาย; } </strong> </span> ขยาย (เด็กแม่); console.log (เด็ก); child.lastage = 12; console.log (object.getownpropertydescriptor (เด็ก, "Lastage")); console.log (เด็ก); </script>ผลลัพธ์สุดท้าย:
คุณสามารถเห็นการพิมพ์สามครั้งเด็ก "สืบทอด" เพื่อตั้งค่าและรับค่า Lastage ไม่เปลี่ยนแปลงและการเขียนก็เป็นเท็จเช่นกัน
สรุป: ฉันกำลังอ่าน "คู่มือผู้มีสิทธิ์ไปยัง JavaScript" เมื่อเร็ว ๆ นี้ ฉันจะสรุปประสบการณ์บางอย่าง หากมีข้อผิดพลาดใด ๆ โปรดแก้ไขและเรียนรู้และดำเนินการด้วยกัน ~
คำอธิบายโดยละเอียดข้างต้นเกี่ยวกับการสืบทอดของ JavaScript โดยใช้ฟังก์ชั่นคือเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น