Object.isSealed()‎

من موسوعة حسوب
< JavaScript‏ | Object
مراجعة 15:41، 28 يناير 2018 بواسطة عبد اللطيف ايمش (نقاش | مساهمات) (استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}')
(فرق) → مراجعة أقدم | المراجعة الحالية (فرق) | مراجعة أحدث ← (فرق)
اذهب إلى التنقل اذهب إلى البحث

الدالة Object.isSealed()‎ تُحدِّد إن كان أحد الكائنات مختومًا (sealed).

البنية العامة

Object.isSealed(obj)

obj

الكائن الذي نريد التحقق منه.

القيمة المعادة

قيمة منطقية (Boolean) تبيّن إذا كان الكائن مختومًا أم لا.

الوصف

يكون الكائن مختومًا إذا لم يكن قابلًا للتوسعة، وكانت جميع خاصياته غير قابلة للضبط (non-configurable)، أي لا يمكن حذفها، لكن ليس ضروريًا أن تكون غير قابلة للكتابة.

لاحظ أنَّه في معيار ECMAScript 5 كان استعمال هذه الدالة على وسيطٍ ليس كائنًا (أي قيمةً أوليةً) سيؤدي إلى رمي TypeError، لكن بدءًا من ECMAScript 2015 (أي ES6) فستُعامل الوسائط التي لا تُمثِّل كائنات على أنها كائنات مختومة، أي أنها ستُعيد القيمة true:

Object.isSealed(1);
// TypeError: 1 is not an object (ES5)

Object.isSealed(1);
// true                          (ES2015)

أمثلة

الكائنات لا تكون مختومةً افتراضيًا:

var empty = {};
Object.isSealed(empty); // === false

إذا جهلنا كائنًا فارغًا غيرَ قابلٍ للتوسعة، فسيكون مختومًا في الحالة الراهنة:

Object.preventExtensions(empty);
Object.isSealed(empty); // === true

لكن المثل لا ينطبق على الكائنات غير الفارغة، ما لم تكن جميع خاصياتها غير قابلة للضبط:

var hasProp = { fee: 'fie foe fum' };
Object.preventExtensions(hasProp);
Object.isSealed(hasProp); // === false

وإذا جعلنا جميع الخاصيات غير قابلة للضبط فسيصبح الكائن مختومًا:

Object.defineProperty(hasProp, 'fee', {
  configurable: false
});
Object.isSealed(hasProp); // === true

أسهل طريقة لختم الكائن هي استخدام الدالة Object.seal():

var sealed = {};
Object.seal(sealed);
Object.isSealed(sealed); // === true

لاحظ أنَّ الكائنات المختومة تكون غير قابلة للتوسع (استخدمنا الدالة Object.isExtensible()):

Object.isExtensible(sealed); // === false

الكائن المختوم قد يكون مجمَّدًا، لكن ذلك ليس ضروريًا، ويكون كذلك إذا كانت جميع الخاصيات غير قابلة للكتابة:

Object.isFrozen(sealed); // === true

لاحظ أنَّ الخاصية p ما تزال قابلةً للكتابة، لذا لن يكون الكائن s2 مجمَّدًا:

var s2 = Object.seal({ p: 3 });
Object.isFrozen(s2); // === false

من المهم ملاحظة أنَّ قابلية الضبط هي التي يُعتدّ بها في خاصيات الوصول (accessor properties):

var s3 = Object.seal({ get p() { return 0; } });
Object.isFrozen(s3); // === true

دعم المتصفحات

الميزة Chrome Firefox Internet Explorer Opera Safari
الدعم الأساسي 6 4 9 12 5.1

مصادر ومواصفات