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 |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.