الدوال الثابتة
مفهوم الدوال الثابتة
الدالة الثابتة (Static Method) هي دالة تابعة لكلاس محدد و يمكن الوصول لها بشكل مباشر منه فقط.
لا يمكن الوصول للدالة الثابتة من خلال كائن تم إنشاؤه من الكلاس، بل فقط من الكلاس نفسه.
عادة ما يتم استخدام الدوال الثابتة لتنظيم الكود، فمثلاً في دروس سابقة تعرفنا الكلاس
في هذا الدرس ستتعلم كيفية تعريف دوال ثابتة في الكلاس طرق الوصول إليها خطوة خطوة.
تعريف دالة ثابتة في الكلاس
يمكنك استخدام الكلمة المفتاحية
في المثال التالي قمنا بتعريف كلاس يحتوي على دالة ثابتة إسمها
عند استدعاء هذه الدالة يجب إعطاءها عددين:
- الأول يمثل المسافة (distance).
- الثاني يمثل الوقت (time).
في النهاية، السرعة يتم حسابها من خلال قسمة المسافة على الوقت.
مثال
<!DOCTYPE html>
<html>
<body>
<script>
class Physics {
static calculateSpeed(distance, time) {
return distance/time;
}
}
// و تمرير عددين لها و من ثم طباعة ما سترجعه لنا calculateSpeed() هنا قمنا باستدعاء الدالة
document.write('Speed = ' + Physics.calculateSpeed(210, 3));
</script>
</body>
</html>
إستدعاء دالة ثابتة من دالة ثابتة
في حال أردت استدعاء دالة ثابتة من دالة ثابتة أخرى فيجب أن تذكر إسم الكلاس الموجودة فيه حتى و لو كانا موجودتين في الكلاس نفسه.
في المثال التالي قمنا بتعريف كلاس يحتوي على دالة ثابتة إسمها
مثال
<!DOCTYPE html>
<html>
<body>
<script>
class Physics {
// يمكن استخدامها لحساب السرعة calculateSpeed() الدالة
static calculateSpeed(distance, time) {
return distance/time;
}
// يمكن استخدامها لحساب السرعة و طباعة قيمتها printSpeed() الدالة
// عند حساب السرعة calculateSpeed() داخلياً تقوم هذه الدالة باستدعاء الدالة
static printSpeed(distance, time) {
document.write('Speed = ' + Physics.calculateSpeed(distance, time));
}
}
// و تمرير عددين لها printSpeed() هنا قمنا باستدعاء الدالة
Physics.printSpeed(210, 3);
</script>
</body>
</html>
إستدعاء دالة ثابتة في الكونستركتور
في حال أردت استدعاء دالة ثابتة في الكونستركتور فيمكنك الوصول إليها من خلال إسم الكلاس أو من خلال الكونستركتور نفسه.
إذا كانت الدالة الثابتة و الكونستركتور تابعان لذات الكلاس فيمكن الوصول للدالة من الكونستركتور من خلال كتابة
في المثال التالي قمنا بتعريف كلاس يحتوي على كونستركتور و دالة ثابتة.
الدالة الثابتة قمنا باستدعائها في الكونستركتور مما يعني أنه في كل مرة يتم فيها إنشاء كائن من الكلاس فإنها ستتنفذ بشكل تلقائي.
المثال الأول
<!DOCTYPE html>
<html>
<body>
<script>
class Physics {
// فيه demo() هنا قمنا بتعريف الكونستركتور و استدعاء الدالة
constructor() {
Physics.demo();
}
// و التي تعرض جملة عادية عند استدعائها demo() هنا قمنا بتعريف الدالة
static demo() {
document.write('demo() is executed');
}
}
// Physics هنا قمنا بإنشاء كائن من الكلاس
new Physics();
</script>
</body>
</html>
فيما يلي قمنا بإعادة المثال السابق مع استدعاء الدالة
المثال الثاني
<!DOCTYPE html>
<html>
<body>
<script>
class Physics {
// فيه demo() هنا قمنا بتعريف الكونستركتور و استدعاء الدالة
constructor() {
this.constructor.demo();
}
// و التي تعرض جملة عادية عند استدعائها demo() هنا قمنا بتعريف الدالة
static demo() {
document.write('demo() is executed');
}
}
// Physics هنا قمنا بإنشاء كائن من الكلاس
new Physics();
</script>
</body>
</html>