تحتوي خاصية كائن في JavaScript على ثلاث خصائص:
1. القابلية للتسجيل. هل هذه الممتلكات قابلة للكتابة؟
2. أمر لا يطاق. عند استخدام POT/في البيان ، هل سيتم تعداد العقار؟
3. قابلة للتكوين. ما إذا كان يمكن تعديل خصائص العقار وما إذا كان يمكن حذف العقار.
في معيار ECMASCRIPT 3 ، تكون قيم الخصائص الثلاثة أعلاه صحيحة ولا يمكن تغييرها: يمكن وصف خاصية الكائن الذي تم إنشاؤه حديثًا. كائن الخاصية (واصف خاصية) لتكوين هذه الخصائص وتعديلها.
إذا تم استخدام معلومات قيمة الخاصية أيضًا كسمة الخاصية ، فإن الخاصية الموجودة في الكائن لها أربع خصائص: القيمة ، قابلة للكتابة ، قابلة للتكوين وقابلة للتكوين.
بالنسبة للخصائص المحددة من خلال أساليب Getter و Setter ، نظرًا لأنه ليس لديهم خصائص قابلة للكتابة (تعتمد خاصية قابلة للكتابة على ما إذا كانت طريقة Setter موجودة) ، فإن هذه الخاصية تحتوي أيضًا على أربع خصائص: الحصول على ، وتعيين ، قابلة للتكوين - الحصول على خصائص وتعيين خصائصها "وظيفة".
احصل على خاصية خاصية الكائن
في معيار ECMASCRIPT 5 ، يمكن الحصول على معلومات خاصية خاصية معينة للكائن نفسه من خلال Object.GetOwnPropertyDescriptor ():
نسخة الكود كما يلي:
var o = {x: 1} ؛
var a = object.create (o) ؛
ay = 3 ؛
console.log (object.getownpropertyDescriptor (a ، "y")) ؛ // object {configable = true ، enumeries = true ، crinable = true ، value = 3}
console.log (object.getOntOnproperTyDescriptor (a ، "x")) ؛ // undefined
كما ترون ، إذا لم يكن الخاصية غير موجودة أو ترث الخاصية من كائن النموذج الأولي ، يتم إرجاع غير محدد.
قم بتعيين خصائص خاصية الكائن
في معيار ECMascript 5 ، يمكن ضبط خصائص خاصية معينة لكائن نفسه من خلال Object.DefineProperty ():
نسخة الكود كما يلي:
Object.DefineProperty (A ، "Y" ، {
القيمة: 3 ،
قابل للكتابة: صحيح ،
التعداد: خطأ ،
التكوين: صحيح
}) ؛
console.log (a.propertyisenumerable ("y")) ؛ // false
إذا كانت خاصية SET موروثة من كائن النموذج الأولي ، فسيقوم JavaScript بإنشاء خاصية تحمل نفس الاسم في الكائن نفسه ، وهو ما يتوافق مع السلوك ذي الصلة لعملية المهمة:
نسخة الكود كما يلي:
Object.DefineProperty (A ، "X" ، {
القيمة: 1 ،
قابل للكتابة: صحيح ،
التعداد: خطأ ،
التكوين: صحيح
}) ؛
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
عند استخدام كائن.
إذا تم إنشاء العقار حديثًا ، فإن جميع قيم الممتلكات التي تم تجاهلها خاطئة أو غير محددة.
إذا كانت العقار موجودًا بالفعل ، تبقى جميع قيم الممتلكات التي تم تجاهلها كما هي.
تعيين خصائص خصائص الكائن على دفعات
إذا كنت بحاجة إلى تعيين خصائص لخصائص متعددة في وقت واحد ، فيمكنك استخدام عبارة defineProperties (). هذا البيان يعيد الكائن المعدل.
نسخة الكود كما يلي:
Object.DefineProperties (A ، {
"y": {القيمة: 79 ، قابلة للكتابة: صواب ، تعداد: صحيح ، قابل للتكوين: صحيح} ،
"z": {value: 99 ، القابلة للكتابة: صواب ، تعداد: صحيح ، قابل للتكوين: صحيح}
}) ؛
console.log (a) ؛ // object {y = 79 ، z = 99}
قواعد إعداد خاصية الملكية
عند تعديل خصائص الخصائص ، يجب اتباع القواعد التالية. إذا تم انتهاك القواعد ، فسيقوم JavaScript بالإبلاغ عن خطأ من النوع:
إذا كان الكائن غير قابل للتمديد ، فيمكنك فقط تعديل خصائص الخاصية الحالية ولا يمكنك إضافة خاصية جديدة.
إذا كانت الخاصية القابلة للتكوين الخاطئة ، فلا يمكن تعديل قيم الخصائص القابلة للتكوين والتعداد. إذا تم تعريف الخاصية بواسطة Getter و Setter ، فلا يمكن تعديل طرق Getter و Setter.
إذا كانت الخاصية القابلة للتكوين للخاصية والخاصية القابلة للكتابة خاطئة ، فلا يمكن تغيير قيمة الخاصية. إذا كانت الخاصية القابلة للكتابة الخاصة بها خاطئة ولكن الخاصية القابلة للتكوين صحيحة ، فلا يزال من الممكن تعديل قيمة الخاصية.