Object.isSealed()‎

من موسوعة حسوب
اذهب إلى: تصفح، ابحث

الدالة 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

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