Function.caller
الخاصية Function.caller
تُعيد الدالة التي استدعت الدالة التي تُنفَّذ حاليًا. لا يجوز استخدام هذه الخاصية في نمط strict.
الوصف
إذا لم تُستدعَ الدالة f
ضمن دالة أخرى (أي أنها استدعيت في أعلى مستوى top level)، فقيمة الخاصية f.caller
هي null
.
هذه الخاصيةُ هي بديلٌ عن الخاصية المحذوفة arguments.caller
التابعة للكائن arguments
.
لاحظ أنَّه في حالة الاستدعاء التعاودي (recursion)، فلا يمكننا إعادة بناء مكدس الاستدعاءات (call stack) باستخدام هذه الخاصية. فلتكن لدينا الشيفرة:
function f(n) { g(n - 1); }
function g(n) { if (n > 0) { f(n); } else { stop(); } }
f(2);
وفي لحظة استدعاء الدالة stop()
سيكون مكدس الاستدعاءات بالشكل الآتي:
f(2) -> g(1) -> f(1) -> g(0) -> stop()
ويكون التعبير الآتي صحيحًا:
stop.caller === g && f.caller === g && g.caller === f
إذا حاولنا الحصول على مكدس الاستدعاءات في الدالة stop()
كما يلي:
var f = stop;
var stack = 'Stack trace:';
while (f) {
stack += '\n' + f.name;
f = f.caller;
}
فلن تنتهي حلقة التكرار أبدًا.
أمثلة
مثال بسيط يختبر الخاصية caller
التابعة للدالة لمعرفة إن كانت مستدعاةً ضمن دالة أخرى أم لا:
function myFunc() {
if (myFunc.caller == null) {
return 'The function was called from the top!';
} else {
return 'This function\'s caller was ' + myFunc.caller;
}
}
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | 8 | نعم | نعم |
مصادر ومواصفات
هذه الخاصية غير معيارية، وهي مُطبَّقة في إصدار JavaScript 1.5.