คุณสมบัติของวัตถุใน ES5 สามารถแบ่งออกเป็น 'คุณลักษณะข้อมูล' และ 'แอตทริบิวต์ accessor'
โดยทั่วไปแล้วคุณลักษณะข้อมูลจะใช้ในการจัดเก็บค่าข้อมูล แอตทริบิวต์ accessor สอดคล้องกับการดำเนินการตั้งค่า/รับและไม่สามารถจัดเก็บค่าข้อมูลได้โดยตรง
คุณลักษณะของคุณลักษณะของข้อมูล: ค่า, เขียน, enumerable, กำหนดค่าได้
คำอธิบาย: สามารถกำหนดค่าได้: จริง/เท็จไม่ว่าแอตทริบิวต์จะถูกลบผ่านการลบไม่ว่าคุณลักษณะของแอตทริบิวต์สามารถแก้ไขได้หรือไม่และแอตทริบิวต์สามารถแก้ไขได้กับแอตทริบิวต์ accessor, ค่าเริ่มต้นเท็จ;
enumerable: true/false ไม่ว่าจะสามารถส่งคืนผ่าน A for in loop, ค่าเริ่มต้นเท็จ;
เขียนได้: จริง/เท็จไม่ว่าค่าของแอตทริบิวต์สามารถแก้ไขได้ค่าเริ่มต้นเป็นเท็จหรือไม่
ค่า: ไม่ได้กำหนดกำหนดค่าของคุณสมบัติค่าเริ่มต้นที่ไม่ได้กำหนด
แอตทริบิวต์ accessor: set, get, enumerable, กำหนดค่าได้
คำอธิบาย: สามารถกำหนดค่าได้: จริง/เท็จไม่ว่าแอตทริบิวต์จะถูกลบผ่านการลบไม่ว่าคุณลักษณะของแอตทริบิวต์สามารถแก้ไขได้หรือไม่และแอตทริบิวต์สามารถแก้ไขได้กับแอตทริบิวต์ accessor, ค่าเริ่มต้นเท็จ;
enumerable: true/false ไม่ว่าจะสามารถส่งคืนผ่าน A for in loop, ค่าเริ่มต้นเท็จ;
ชุด: ฟังก์ชั่น, ฟังก์ชั่นที่เรียกว่าเมื่ออ่านค่าคุณสมบัติ;
รับ: ฟังก์ชั่น, ฟังก์ชั่นที่เรียกว่าเมื่อแก้ไขค่าคุณสมบัติ
เพิ่มคุณสมบัติให้กับวัตถุหรือแก้ไขคุณสมบัติของคุณสมบัติที่มีอยู่โดยใช้ Object.defineProperty () หรือ Object.defineProperties ()
Object.defineProperty (Object, PropertyName, Descriptor):
พารามิเตอร์คำอธิบาย: วัตถุ: วัตถุที่จำเป็นต้องเพิ่มหรือแก้ไขแอตทริบิวต์;
PropertyName: ชื่อของคุณสมบัติ, รูปแบบสตริง;
Descriptor: คำอธิบายของแอตทริบิวต์, การตั้งค่าคุณสมบัติของคุณลักษณะข้อมูลหรือแอตทริบิวต์ accessor
การวิเคราะห์ตัวอย่าง:
คุณสมบัติข้อมูล:
var emp = {ชื่อ: 'tom'}; Object.defineProperty (emp, 'name', {writable: false}); emp.name = 'jery'; console.log (emp.name); // เอาท์พุททอมเพราะการเขียนได้ถูกตั้งค่าเป็น talleobject.defineproperty (emp, 'อายุ' 22 เนื่องจากค่าถูกตั้งค่าเป็น 22emp.age = 25; console.log (emp.age); // output 25, การตั้งค่าที่เขียนได้คือ truedelete emp.age; console.log (emp.age); // output 25, กำหนดค่าเป็นเท็จคุณสมบัติของอุปกรณ์เสริม:
var emp = {_ ชื่อ: 'tom', _ อายุ: 20}; object.defineproperty (emp, 'ชื่อ', {get: function () {return this._name;}}); console.log (emp.name); 'jery'; console.log (emp.name); // เอาท์พุททอมโดยไม่มีวิธีการตั้งค่าค่า _name ไม่สามารถแก้ไข object.defineproperty (emp, 'อายุ', {กำหนดค่าได้: จริงรับ: ฟังก์ชั่น () {ส่งคืนสิ่งนี้ 25; console.log (emp.age) // output 25, emp.age = 25 คือการกำหนด 25 ถึง _age โดยใช้วิธีการตั้งค่า emp.age คือการอ่าน _age โดยใช้วิธีการลบ EMP.age; console.log (emp.age);หมายเหตุ: แอตทริบิวต์ accessor สามารถมีบทบาทที่ดีในการปกป้องมัน เมื่อมีเพียงวิธี GET จะอ่านได้อย่างเดียวและไม่สามารถเขียนได้ ในทางตรงกันข้ามเมื่อมีเพียงชุดมันสามารถเขียนได้ แต่ไม่อ่าน
ข้างต้นคือการอภิปรายสั้น ๆ เกี่ยวกับแอตทริบิวต์ข้อมูล JavaScript และแอตทริบิวต์ accessor ที่ตัวแก้ไขนำมาให้คุณ ฉันหวังว่าทุกคนจะสนับสนุน wulin.com เพิ่มเติม ~