คุณสมบัติของวัตถุใน JavaScript มีคุณสมบัติสามประการ:
1. Wwlitable. ทรัพย์สินนี้เขียนได้หรือไม่?
2.-uremerable เมื่อใช้คำสั่ง FOR/In คุณสมบัติจะถูกแจกแจงหรือไม่?
3. กำหนดค่าได้ ไม่ว่าจะเป็นคุณสมบัติของคุณสมบัติหรือไม่และสามารถลบคุณสมบัติได้หรือไม่
ในมาตรฐาน ECMASCRIPT 3 ค่าของคุณสมบัติทั้งสามข้างต้นนั้นเป็นจริงและไม่สามารถเปลี่ยนแปลงได้: คุณสมบัติของวัตถุที่สร้างขึ้นใหม่นั้นสามารถเขียนได้และลบได้ วัตถุคุณสมบัติ (ตัวอธิบายคุณสมบัติ) เพื่อกำหนดค่าและแก้ไขคุณสมบัติเหล่านี้
หากข้อมูลมูลค่าของทรัพย์สินถูกใช้เป็นแอตทริบิวต์ของคุณสมบัติคุณสมบัติในวัตถุมีคุณสมบัติสี่ประการ ได้แก่ ค่าที่เขียนได้พิสูจน์ได้และกำหนดค่าได้
สำหรับคุณสมบัติที่กำหนดโดยวิธีการของ Getter และ Setter เนื่องจากไม่มีคุณสมบัติที่เขียนได้ 'คือฟังก์ชั่น'
รับคุณสมบัติของคุณสมบัติวัตถุ
ในมาตรฐาน ECMASCRIPT 5 ข้อมูลคุณสมบัติของคุณสมบัติบางอย่างของวัตถุนั้นสามารถรับได้ผ่าน Object.TownPropertyDescriptor ():
การคัดลอกรหัสมีดังนี้:
var o = {x: 1};
var a = object.create (o);
ay = 3;
console.log (Object.getOwnPropertyDescriptor (a, "y")); // object {configural = true, enumerable = true, เขียน = true, value = 3}
console.log (object.getownpropertydescriptor (a, "x")); // undefined
อย่างที่คุณเห็นหากคุณสมบัติไม่มีอยู่หรือคุณสมบัติที่สืบทอดมาจากวัตถุต้นแบบจะถูกส่งคืน
ตั้งค่าคุณสมบัติของคุณสมบัติวัตถุ
ในมาตรฐาน ECMASCRIPT 5 คุณสมบัติของคุณสมบัติบางอย่างของวัตถุนั้นสามารถตั้งค่าผ่าน Object.defineProperty ():
การคัดลอกรหัสมีดังนี้:
Object.defineProperty (a, "y", {
ค่า: 3,
เขียนได้: จริง
enumerable: FALSE,
การกำหนดค่า: จริง
-
console.log (a.propertyisenumerable ("y")); // false
หากคุณสมบัติชุดได้รับการสืบทอดมาจากวัตถุต้นแบบ JavaScript จะสร้างคุณสมบัติของชื่อเดียวกันในวัตถุเองซึ่งสอดคล้องกับพฤติกรรมที่เกี่ยวข้องของการดำเนินการที่ได้รับมอบหมาย:
การคัดลอกรหัสมีดังนี้:
Object.defineProperty (a, "x", {
ค่า: 1,
เขียนได้: จริง
enumerable: FALSE,
การกำหนดค่า: จริง
-
console.log (a.propertyisenumerable ("x")); // false
console.log (o.propertyisenumerable ("x")); // true
นอกเหนือจากการปรับเปลี่ยนคุณสมบัติของคุณสมบัติแล้วคุณยังสามารถเปลี่ยนคุณสมบัติเพื่อเข้าถึงด้วย Getter หรือ Setter:
การคัดลอกรหัสมีดังนี้:
Object.defineProperty (a, "y", {
รับ: function () {return 42;}
-
console.log (ay); // 42
เมื่อใช้ Object.defineProperty () ค่าคุณสมบัติของออบเจ็กต์สามารถถูกละเว้นได้บางส่วน
หากคุณสมบัติถูกสร้างขึ้นใหม่ค่าคุณสมบัติที่ถูกละเว้นทั้งหมดจะเป็นเท็จหรือไม่ได้กำหนด
หากคุณสมบัติมีอยู่แล้วค่าทรัพย์สินที่ถูกเพิกเฉยทั้งหมดจะยังคงอยู่ตามที่เป็นอยู่
ตั้งค่าคุณสมบัติของคุณสมบัติวัตถุในแบทช์
หากคุณต้องการตั้งค่าคุณสมบัติของคุณสมบัติหลายอย่างพร้อมกันคุณสามารถใช้คำสั่ง defineproperties () คำสั่งนี้ส่งคืนวัตถุที่แก้ไข
การคัดลอกรหัสมีดังนี้:
Object.defineProperties (a, {
"y": {value: 79, เขียนได้: จริง, enumerable: จริง, กำหนดค่าได้: true},,
"z": {value: 99, เขียนได้: จริง, enumerable: จริง, กำหนดค่าได้: true}
-
console.log (a); // object {y = 79, z = 99}
กฎการตั้งค่าคุณสมบัติคุณสมบัติ
เมื่อแก้ไขคุณสมบัติคุณสมบัติจะต้องปฏิบัติตามกฎต่อไปนี้ หากกฎถูกละเมิด JavaScript จะรายงานข้อผิดพลาดของ TypeError:
หากวัตถุไม่สามารถขยายได้คุณสามารถแก้ไขคุณสมบัติของคุณสมบัติที่มีอยู่เท่านั้นและไม่สามารถเพิ่มคุณสมบัติใหม่ได้
หากคุณสมบัติที่กำหนดค่าได้ของคุณสมบัติเป็นเท็จค่าของคุณสมบัติที่กำหนดค่าได้และที่ระบุได้ไม่สามารถแก้ไขได้ หากคุณสมบัติถูกกำหนดโดย Getter และ Setter วิธีการ getter และ setter ไม่สามารถแก้ไขได้
หากคุณสมบัติที่กำหนดค่าได้ของคุณสมบัติและคุณสมบัติที่เขียนได้นั้นเป็นเท็จทั้งค่าคุณสมบัติจะไม่สามารถเปลี่ยนแปลงได้ หากคุณสมบัติที่เขียนได้ของคุณสมบัติเป็นเท็จ แต่คุณสมบัติที่กำหนดค่าได้นั้นเป็นจริงค่าคุณสมบัติยังสามารถแก้ไขได้