كل المقالات →

فهم واستخدام الوراثة في Script Includes

نُشر في ٦ مارس ٢٠٢٢ · 1 دقائق قراءة

طُرح سؤال في مجتمع ServiceNow حول كيفية عمل الوراثة في Script Includes، فرأيت أن الموضوع يستحق مقالاً قصيراً ومكتملاً.

الأساسيات

في Script Include، يمكنك كتابة دالة أو إنشاء كلاس. في JavaScript، الكلاس هو كائن، والكائن يمكنه الوصول إلى خصائص ودوال كائن آخر — يُسمى هذا الوراثة (Inheritance).

الوراثة طريقة رائعة لإنشاء تسلسل هرمي أب/ابن بين الكلاسات. تكون مفيدة تحديداً حين تريد التعبير عن أن أحد الكائنات مشابه إلى حد كبير لكائن آخر، لكنه يضيف إليه تعديلات أو ميزات.

الكلاس الأب (Base Class) يوفر السلوك الأساسي للكلاسات الفرعية، التي تمتد فوق ذلك السلوك لتشكّل سلوكها الخاص.

مثال عملي

تخيّل أنك تريد إنشاء سكريبتات للتعامل مع سلوك Tasks وIncidents معاً. بما أن Incidents تمتد من Tasks، ثمة الكثير من السلوك المشترك. النهج الذكي هو كتابة سلوك Task في كلاس أب تمتد منه Incident.

الكلاس الأب

var TaskParentClass = Class.create();
TaskParentClass.prototype = {
    initialize: function() {},

    WelcomeToTask: function(gr) {
        gs.addInfoMessage('مرحباً بك في المهمة رقم ' + gr.number);
    },

    getCI: function(gr) {
        gs.addInfoMessage('اسم CI هو ' + gr.cmdb_ci);
    },

    type: 'TaskParentClass'
};

الكلاس الابن (باستخدام Object.extendsObject)

var IncidentChildClass = Class.create();
IncidentChildClass.prototype = Object.extendsObject(TaskParentClass, {
    initialize: function() {},

    getCaller: function(gr) {
        gs.addInfoMessage('اسم المتصل هو ' + gr.caller_id.name);
    },

    type: 'IncidentChildClass'
});

استدعاء دوال الأب والابن

بعد الامتداد باستخدام Object.extendsObject، تصبح جميع دوال الأب متاحة للكلاس الابن:

// استدعاء دالة من الكلاس الأب
new IncidentChildClass().WelcomeToTask(current);

// استدعاء دالة من الكلاس الابن
new IncidentChildClass().getCaller(current);

كلا الاستدعاءين يعملان بشكل صحيح. يملك الكلاس الابن حق الوصول إلى دالته getCaller وكذلك دوال الأب WelcomeToTask وgetCI.

متى تستخدم الوراثة؟

استخدمها حين يكون لديك مجموعة من السكريبتات المترابطة تشترك في منطق كبير. هذا النمط يتجنب التكرار، ويجعل كل كلاس أسهل في الفهم بمعزل عن غيره، ويتيح لك إضافة كلاسات فرعية جديدة دون المساس بالأب.