هذا (برمجة الحاسوب)

تُستخدم الكلمات المفتاحية this و self و Me في بعض لغات البرمجة للإشارة إلى الكائن أو الصنف أو الكيان الذي ينتمي إليه الكود قيد التشغيل. ويعتمد الكيان المشار إليه على سياق التنفيذ (مثل الكائن الذي تم استدعاء دالته). وتستخدم لغات البرمجة المختلفة هذه الكلمات المفتاحية بطرق متباينة قليلاً. ففي اللغات التي تكون فيها كلمة مفتاحية مثلthis إلزامية، تُعدّ هذه الكلمة المفتاحية الوسيلة الوحيدة للوصول إلى البيانات والدوال المخزنة في الكائن الحالي. أما في اللغات التي تكون فيها اختيارية، فتُستخدم هذه الكلمات المفتاحية لتمييز المتغيرات والدوال التي تحمل الاسم نفسه.this

البرمجة الكائنية التوجه

في العديد من لغات البرمجة كائنية التوجه ، يُستخدم المتغير `local` ( أو ` include` ) في دوال النسخ للإشارة إلى الكائن الذي تعمل عليه. كانت لغة SIMULA 67 ، أول لغة برمجة كائنية التوجه، تستخدم `local` للإشارة صراحةً إلى الكائن المحلي. [ 1 ] : 4.3.2.3. كما تستخدم لغة C++ واللغات المشتقة منها (مثل Java و C# و D و PHP ) `local` بشكل عام . وتستخدم لغات أخرى مثل Smalltalk و Object Pascal و Perl و Python و Ruby و Rust و Objective-C و DataFlex و Swift `local`. أما لغة Visual Basic من Microsoft فتستخدم `local` .thisselfMethisthisselfMe

المفهوم متشابه في جميع اللغات: thisعادةً ما يكون مرجعًا أو مؤشرًا غير قابل للتغيير يشير إلى الكائن الحالي؛ وغالبًا ما يكون الكائن الحالي هو الكود الذي يعمل كـ "أصل" أو "مُستدعي" للخاصية أو الأسلوب أو الروتين الفرعي أو الدالة التي تحتوي على الكلمة thisالمفتاحية. بعد إنشاء الكائن بشكل صحيح، أو تهيئته، thisيكون دائمًا مرجعًا صالحًا. تتطلب بعض اللغات ذلك صراحةً؛ بينما تستخدم لغات أخرى النطاق المعجمي لاستخدامه ضمنيًا لجعل الرموز داخل فئتها مرئية. أو بدلاً من ذلك، thisقد يكون الكائن الحالي المشار إليه بواسطة كائن كود مستقل استدعى الدالة أو الأسلوب الذي يحتوي على الكلمة المفتاحية this. يحدث هذا، على سبيل المثال، عندما يستدعي معالج أحداث JavaScript المرفق بعلامة HTML في صفحة ويب دالة تحتوي على الكلمة المفتاحية thisالمخزنة في المساحة العامة خارج كائن المستند؛ في هذا السياق، thisسيشير إلى عنصر الصفحة داخل كائن المستند، وليس كائن النافذة المُحيط. [ 2 ]

في بعض اللغات، مثل C++ وJava وRaku، thisيُعدّ `self` selfكلمة مفتاحية ، ويوجد المتغير تلقائيًا في دوال الكائنات. أما في لغات أخرى، مثل Python وRust وPerl 5، فإنّ المعامل الأول لدالة الكائن هو مرجع من هذا النوع، ويجب تحديده صراحةً. في Python وPerl، ليس من الضروري تسمية المعامل `self` بـ `self` thisأو self`self`؛ إذ يمكن للمبرمج تسميته بحرية كأي معامل آخر. مع ذلك، جرت العادة في Perl وPython على تسمية المعامل الأول لدالة الكائن `self` بـ `self` self. يتطلب Rust تسمية الكائن `self` بـ `self` أو `self` &self، selfوذلك بحسب ما إذا كانت الدالة المستدعاة تستعير الكائن المستدعي أو تنقله، على التوالي.

لا ترتبط الدوال الثابتة في لغتي C++ أو Java بالمثيلات، بل بالفئات، ولذلك لا يمكن استخدامها this، لعدم وجود كائن. أما في لغات أخرى، مثل Ruby وSmalltalk وObjective-C وSwift، فترتبط الدالة بكائن فئة يُمرر كـ this، وتُسمى دوال الفئة . بالنسبة لدوال الفئة، تستخدم Python clsللوصول إلى كائن الفئة .

الدقائق والصعوبات

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

في بعض المترجمات (على سبيل المثال GCC )، يمكن تحويل المؤشرات إلى أساليب مثيل C++ مباشرة إلى مؤشر من نوع آخر، مع thisمعلمة مؤشر صريحة. [ 3 ]

التكرار المفتوح

تُعرف دلالات الإرسال في `recursion` this، أي أن استدعاءات الدوال تُرسل ديناميكيًا، باسم الاستدعاء المفتوح ، مما يعني إمكانية إعادة تعريف هذه الدوال بواسطة الفئات أو الكائنات المشتقة. في المقابل، يستخدم الاستدعاء المباشر المسمى أو الاستدعاء المجهول للدالة الاستدعاء المغلق ، مع الإرسال الثابت. على سبيل المثال، في كود بيرل التالي لحساب المضروب، يُمثل الرمز `token` مرجعًا للدالة الحالية.this__SUB__

استخدم الخاصية ":5.16" ؛ الإجراء الفرعي { my $x = shift ؛ $x == 0 ؟ 1 : $x * __SUB__ -> ( $x - 1 }

على النقيض من ذلك، في لغة C++ (باستخدام صريح thisللتوضيح، على الرغم من أنه ليس ضروريًا) thisيرتبط بالكائن نفسه، ولكن إذا تم تعريف طريقة الفئة على أنها "افتراضية" أي متعددة الأشكال في الأساس، فسيتم حلها عبر الإرسال الديناميكي بحيث يمكن للفئات المشتقة تجاوزها.

دالة حساب المضروب ( عدد صحيح غير مُوقّع n ) { إذا كان ( n == 0 ) { أرجع 1 ؛ } وإلا { أرجع n * هذا -> المضروب ( n - 1 } }

هذا المثال اصطناعي لأنه استدعاء ذاتي مباشر، لذا فإن إعادة تعريف factorialالدالة سيؤدي إلى إعادة تعريف هذه الدالة؛ أما الأمثلة الأكثر طبيعية فهي عندما تستدعي دالة في فئة مشتقة نفس الدالة في فئة أساسية، أو في حالات الاستدعاء الذاتي المتبادل. [ 4 ] [ 5 ]

يُعزى سبب مشكلة هشاشة الفئة الأساسية إلى الاستدعاء الذاتي المفتوح، مع اقتراح استخدام الاستدعاء الذاتيthis المغلق (الإرسال الثابت) بدلاً من الاستدعاء الذاتي المفتوح (الإرسال الديناميكي) عند استدعاء الدوال، واستخدام الاستدعاء الذاتي المفتوح فقط عند طلبه تحديدًا؛ أما الاستدعاءات الخارجية (التي لا تستخدم الاستدعاء الذاتي المفتوح this) فسيتم إرسالها ديناميكيًا كالمعتاد. [ 6 ] [ 7 ] ويتم حل هذه المشكلة عمليًا في JDK من خلال منهجية برمجة محددة؛ وقد تم وضع هذه المنهجية رسميًا بواسطة C. Ruby وGT Leavens؛ وهي تتكون من القواعد التالية: [ 8 ]

  • لا يوجد كود يستدعي publicطرقًا على this.
  • يتم تغليف التعليمات البرمجية التي يمكن إعادة استخدامها داخليًا (عن طريق الاستدعاء من طرق أخرى من نفس الفئة) في طريقة protectedأو privateطريقة؛ إذا كان من الضروري عرضها مباشرة للمستخدمين أيضًا، فإن publicطريقة التغليف تستدعي الطريقة الداخلية.
  • يمكن تخفيف التوصية السابقة بالنسبة للطرق البحتة .

التطبيقات

لغة سي++

كانت الإصدارات الأولى من لغة C++ تسمح thisبتغيير المؤشر؛ وبذلك كان بإمكان المبرمج تغيير الكائن الذي تعمل عليه الدالة. أُزيلت هذه الميزة لاحقًا، وأصبح الآن thisفي لغة C++ قيمةً يمينية . [ 9 ]

لم تتضمن الإصدارات المبكرة من لغة C++ المراجع، وقد أشير إلى أنه لو كانت كذلك في C++ منذ البداية، thisلكانت المراجع هي المرجع وليس المؤشر. [ 10 ]

تتيح لغة C++ للكائنات تدمير نفسها باستخدام عبارة الكود المصدري التالية: delete this.

سي شارب

تعمل الكلمة المفتاحية thisفي لغة C# بنفس طريقة عملها في لغة Java، بالنسبة لأنواع المراجع. مع ذلك، في أنواع القيم في C# ، thisلها دلالات مختلفة تمامًا، فهي تشبه مرجع متغير قابل للتغيير عادي، ويمكن أن تظهر حتى على الجانب الأيسر من عملية الإسناد.

يُستخدم ` thisis` في لغة C# للسماح بالإشارة إلى متغير حقل خارجي داخل دالة تحتوي على متغير محلي يحمل نفس الاسم. في هذه الحالة، على سبيل المثال، var n = localAndFieldname;ستُسند العبارة `is` داخل الدالة نوع وقيمة المتغير المحلي localAndFieldnameإلى `is` n، بينما ستُسند العبارة `is` var n = this.localAndFieldname;نوع وقيمة متغير الحقل الخارجي إلى ` nis`. [ 11 ]

د

في لغة Dthis ، يشير `method` في فئة أو بنية أو اتحاد إلى مرجع غير قابل للتغيير لمثيل الكائن المُحيط. الفئات هي أنواع مرجعية ، بينما البنى والاتحادات هي أنواع قيم. في الإصدار الأول من D، thisتُستخدم الكلمة المفتاحية `method` كمؤشر إلى مثيل الكائن المرتبط به، بينما في D2، تُعامل كوسيط ضمني للدالة ref.

ديلان

في لغة البرمجة ديلان ، وهي لغة كائنية التوجه تدعم تعدد الأساليب ولا تحتوي على مفهوم this، لا يزال إرسال رسالة إلى كائن موجودًا في الصيغة. يعمل الشكلان أدناه بنفس الطريقة؛ والاختلافات مجرد تحسينات نحوية .

object.method(param1, param2)

و

method (object, param1, param2)

إيفل

في نص الفئة، يكون النوع الحالي هو النوع المُستمد من الفئة الحالية . ضمن خصائص الفئة (الإجراءات والأوامر والاستعلامات)، يُمكن استخدام الكلمة المفتاحية Currentللإشارة إلى الفئة الحالية وخصائصها. استخدام الكلمة المفتاحية Currentاختياري، إذ Currentيُفهم ضمنيًا من خلال الإشارة إلى اسم خاصية الفئة الحالية صراحةً. على سبيل المثال: قد يكون لدينا خاصية `foo` في الفئة MY_CLASS ونشير إليها باستخدام:

فصلفئتيميزة -- الوصولfoo : عدد صحيحmy_function : عدد صحيحيفعلالنتيجة := fooنهايةنهاية

[ 12 ]

السطر رقم 10 (أعلاه) يحتوي على إشارة ضمنية إلى Currentمن خلال استدعاء `foo` البسيط.

السطر رقم 10 (أدناه) يحتوي على إشارة صريحة إلى Currentاستدعاء `Current.foo`.

فصلفئتيميزة -- الوصولfoo : عدد صحيحmy_function : عدد صحيحيفعلالنتيجة := القيمة الحالية . fooنهايةنهاية

كلا النهجين مقبولان للمترجم، ولكن يفضل استخدام النسخة الضمنية (على سبيل المثال) لأنها أقل إسهاباً.x := foo

كما هو الحال مع اللغات الأخرى، هناك أوقات يكون فيها استخدام الكلمة المفتاحية Currentإلزاميًا، مثل:

فصلفئتيميزة -- الوصولالأمر الخاص بي-- إنشاء MY_OTHER_CLASS باستخدام `Current`محليx : صفي_الآخريفعلإنشاء x . إنشاء_باستخدام_شيء_ما ( الحالي )نهايةنهاية

في حالة الكود أعلاه، فإن الاستدعاء في السطر رقم 11 لـ make_with_something يمرر الفئة الحالية عن طريق تمرير الكلمة المفتاحية بشكل صريح Current.

جافا

الكلمة المفتاحية thisهي كلمة مفتاحية في لغة جافا تمثل النسخة الحالية من الفئة التي تظهر فيها. وتُستخدم للوصول إلى متغيرات الفئة وأساليبها.

بما أن جميع طرق النسخ افتراضية في جافا، thisفلا يمكن أن تكون قيمتها فارغة. [ 13 ]

جافا سكريبت

في لغة جافا سكريبت، وهي لغة برمجة أو لغة نصية تستخدم على نطاق واسع في متصفحات الويب، thisتعد كلمة رئيسية مهمة، على الرغم من أن ما يتم تقييمه يعتمد على مكان استخدامها.

  • عند استخدامها خارج أي دالة، في الفضاء العام، thisتشير إلى الكائن المحيط، والذي في هذه الحالة هو نافذة المتصفح المحيطة، أي windowالكائن.
  • عند استخدام الكلمة المفتاحية في دالة مُعرَّفة في النطاق العام، فإن ما thisتشير إليه يعتمد على كيفية استدعاء الدالة. فعند استدعاء هذه الدالة مباشرةً (مثلاً f(x)thisستشير إلى النطاق العام الذي عُرِّفت فيه الدالة، والذي قد توجد فيه دوال ومتغيرات عامة أخرى (أو في الوضع الصارم، تكون undefined). أما إذا تم استدعاء دالة عامة تحتوي thisعلى كجزء من معالج حدث عنصر في كائن المستند، thisفستشير إلى عنصر HTML المُستدعي.
  • عند استدعاء طريقة باستخدام الكلمة newالمفتاحية (على سبيل المثال var c = new Thing())، فإن ذلك يشير داخل Thing thisإلى كائن Thing نفسه.
  • عندما تُلحق دالة كخاصية لكائن وتُستدعى كطريقة لهذا الكائن (مثلاً obj.f(x)thisفإنها ستشير إلى الكائن الذي تحتوي عليه الدالة. [ 14 ] [ 15 ] بل من الممكن تحديدها يدويًا thisعند استدعاء دالة، باستخدام طريقتي `function` .call()أو ` .apply()function` لكائن الدالة . [ 16 ]obj.f(x) على سبيل المثال، يمكن كتابة استدعاء الطريقة أيضًا على النحو التالي: `function` obj.f.call(obj, x).

للتغلب على المعنى المختلف لـ thisفي الدوال المتداخلة مثل معالجات أحداث DOM، من الشائع في JavaScript حفظ مرجع thisالكائن المستدعي في متغير (يسمى عادةً thatأو self)، ثم استخدام المتغير للإشارة إلى الكائن المستدعي في الدوال المتداخلة.

على سبيل المثال:

// في هذا المثال، $ هو مرجع إلى مكتبة jQuery. $ ( '.element' ). hover ( function () { // هنا، يشير كل من this وthat إلى العنصر الموجود أسفل مؤشر الماوس. var that = this ; $ ( this ) .find ( '.elements' ). each ( function () { // هنا، يشير this إلى عنصر DOM الذي يتم تكراره. // ومع ذلك، لا يزال that يشير إلى العنصر الموجود أسفل مؤشر الماوس. $ ( this ) .addClass ( 'highlight' ); }); });

ومن الجدير بالذكر أن لغة جافا سكريبت تستخدم كلاً من thisو والكلمة المفتاحية ذات الصلة self[ 17 ] (على عكس معظم اللغات الأخرى التي تميل إلى استخدام أحدهما فقط)، مع selfاقتصار على عمال الويب تحديداً. [ 18 ]

وأخيرًا، كطريقة موثوقة للإشارة تحديدًا إلى الكائن العام (النافذة أو ما يعادلها)، تتميز لغة جافا سكريبت بالكلمة globalThisالمفتاحية. [ 19 ]

لغة لوا

في لغة Lua، selfيُستخدم ` this` كاختصار برمجي عند تعريف الدوال باستخدام :المعامل `this`. [ 20 ] عند استدعاء دالة باستخدام `this` :، يتم تمرير الكائن المراد فهرسته ضمنيًا كمعامل أول للدالة المستدعاة.

على سبيل المثال، الدالتان التاليتان متكافئتان:

الكائن المحلي = {}دالة obj.foo ( arg1 , arg2 ) print ( arg1 , arg2 ) -- لا يمكن استخدام " self" هنا endدالة obj : bar ( arg ) print ( self , arg ) -- "self" هو الوسيط الأول الضمني قبل arg endيمكن استدعاء جميع الدوال بكلتا الطريقتين، باستخدام "." أو باستخدام ":"obj : foo ( "Foo" ) -- مكافئ لـ obj.foo(obj, "Foo") obj . bar ( obj , "Bar" ) -- مكافئ لـ obj:bar("Bar")

لغة Lua نفسها ليست كائنية التوجه، ولكن عند دمجها مع ميزة أخرى تسمى الجداول الوصفية، فإن استخدامها selfيسمح للمبرمجين بتعريف الوظائف بطريقة تشبه البرمجة كائنية التوجه.

باور شيل

في PowerShell، يحتوي المتغير التلقائي الخاص $_على الكائن الحالي في كائن خط الأنابيب. يمكنك استخدام هذا المتغير في الأوامر التي تُنفذ إجراءً على كل كائن أو على كائنات مُحددة في خط الأنابيب. [ 21 ]

"واحد" ، "اثنان" ، "ثلاثة" | % { اكتب $_ }

كما بدأ الأمر مع PowerShell 5.0، الذي يضيف صيغة رسمية لتعريف الفئات والأنواع الأخرى التي يحددها المستخدم، [ 22 ]$this يصف المتغير المثيل الحالي للكائن.

بايثون

في لغة بايثون، لا توجد كلمة مفتاحية لـ ` this. عند استدعاء دالة عضو على كائن، يتم استدعاء الدالة نفسها على كائن الفئة الخاص بالكائن، مع ربط الكائن تلقائيًا بالوسيط الأول للدالة. وبالتالي، فإن الوسيط الأول الإلزامي لأساليب الكائنات يعمل كـ this`. يُسمى هذا الوسيط عادةً ` self، ولكن يمكن تسميته بأي اسم.

في توابع الصنف (التي تُنشأ باستخدام classmethodالمُزخرف)، يشير الوسيط الأول إلى كائن الصنف نفسه، ويُسمى عادةً `static` cls؛ وتُستخدم هذه التوابع بشكل أساسي للمنشئات القابلة للتوريث، [ 23 ] حيث يسمح استخدام الصنف كمعامل بتوريث المنشئ. أما في التوابع الثابتة (التي تُنشأ باستخدام staticmethodالمُزخرف)، فلا يوجد وسيط أول خاص.

الصدأ

في لغة Rust، تُعرَّف الأنواع بشكل منفصل عن الدوال المرتبطة بها. يجب أن تأخذ الدوال المصممة لتكون مماثلة لأساليب النسخ في لغات البرمجة الكائنية التقليدية selfمُعاملًا أوليًا صريحًا. يمكن بعد ذلك استدعاء هذه الدوال باستخدام instance.method()اختصارات برمجية. على سبيل المثال:

struct Foo { bar : i32 , }impl Foo { fn new () -> Foo { Foo { bar : 0 , } }fn refer ( & self ) { println! ( "{} " , self . bar ); }fn mutate ( & mut self , baz : i32 ) { self . bar = baz ; }fn consume ( self ) { self . refer (); } }

يُعرّف هذا النوع، Foo، والذي يرتبط به أربع دوال. الدالة الأولى، Foo::new()، ليست دالة خاصة بالمثيل ويجب تحديدها باستخدام بادئة النوع. أما الدوال الثلاث المتبقية، فتأخذ جميعها selfمُعاملًا بطرقٍ مُتعددة، ويمكن استدعاؤها على Fooمثيل باستخدام صيغة النقطة المُختصرة، والتي تُعادل استدعاء اسم الدالة المُؤهل بالنوع مع selfمُعامل أول صريح.

let mut foo : Foo = Foo :: new ( ); // يجب استدعاؤها كدالة محددة النوع foo.refer (); // تطبع "0". الدالة Foo::refer() لها حق الوصول للقراءة فقط إلى نسخة foo foo . foo.mutate ( 5 ) ; // تُغير foo في مكانها، وهو أمر مسموح به وفقًا لمواصفات &mut، ويجب تعريف foo. mut foo.consume ( ) ; // تطبع "5" وتُدمر foo، لأن الدالة Foo::consume() تستحوذ على ملكية self بالكامل// يُعادل foo.refer() Foo :: refer ( foo ); // خطأ في الترجمة: foo خارج النطاق

الذات

سُميت لغة الذات بهذا الاسم نسبةً إلى هذا الاستخدام لكلمة "الذات " .

Xbase++

Selfيُستخدم هذا المصطلح حصراً داخل دوال الفئة. وهناك طريقة أخرى للإشارة إليه Selfوهي استخدام ::.

انظر أيضاً

مراجع

  1. ^ دال، أولي-جوهان ؛ ميرهوغ، بيورن؛ نيجارد ، كريستين (1970). "اللغة الأساسية المشتركة، مركز الحوسبة النرويجي" .
  2. باول، توماس أ، وشنايدر، فريتز، 2012. جافا سكريبت: المرجع الكامل، الطبعة الثالثة. ماكجرو هيل. الفصل 11، معالجة الأحداث ، ص 428. ISBN 978-0-07-174120-0
  3. استخدام مجموعة مترجمات جنو (GCC)الدوال الأعضاء المرتبطة
  4. " الاستدعاء الذاتي المغلق والمفتوح رالف هينز ، يوليو 2007
  5. التكرار المفتوح ، لامدا: الحل الأمثل
  6. " الاستدعاء الذاتي المفتوح الانتقائي: حل لمشكلة فئة الأساس الهشة "، جوناثان ألدريتش
  7. " الاستدعاء الذاتي المفتوح الانتقائي: حل لمشكلة الفئة الأساسية الهشة لامدا: الحل الأمثل
  8. ألدريتش، جوناثان، وكيفن دونيلي. " الاستدعاء الذاتي المفتوح الانتقائي: التفكير المعياري حول المكونات والوراثة. " SAVCBS 2004 مواصفات والتحقق من الأنظمة القائمة على المكونات (2004): 26. (مقتبس عن الحل المعتمد في JDK) سي. روبي وجي تي ليفنز. "إنشاء فئات فرعية صحيحة بأمان دون الاطلاع على كود الفئة الأصلية". في أنظمة ولغات وتطبيقات البرمجة كائنية التوجه، أكتوبر 2000. doi : 10.1145/353171.353186، متاح أيضًا كتقرير فني TR #00-05d
  9. ISO/IEC 14882:2003(E): لغات البرمجة - C++ . ISO/IEC. 2003.
  10. ستروستروب: الأسئلة الشائعة حول أسلوب وتقنية لغة C++
  11. دي سميت، بارت، 2011. سي شارب 4.0 Unleashed. دار سامز للنشر، إنديانابوليس، الولايات المتحدة الأمريكية. الفصل 4، أساسيات اللغة ، صفحة 210. ISBN 978-0-672-33079-7
  12. ملاحظة : أرقام الأسطر هي لأغراض مرجعية فقط. لا يحتوي نص فئة Eiffel على أرقام أسطر. ومع ذلك، يوجد خيار لأرقام الأسطر في بيئة تطوير Eiffel Studio، والذي يمكن تفعيله اختياريًا لأغراض مرجعية (مثل البرمجة الثنائية، إلخ).
  13. بارنز، د. وكولينغ، م. الكائنات أولاً مع جافا . "...السبب في استخدام هذا التركيب [this] هو أننا نواجه حالة تُعرف باسم تحميل الأسماء الزائد - استخدام نفس الاسم لكيانين مختلفين... من المهم فهم أن الحقول والمعاملات عبارة عن متغيرات منفصلة موجودة بشكل مستقل عن بعضها البعض، على الرغم من تشابه أسمائها. لا يُعدّ تشابه اسم المعامل والحقل مشكلة في جافا."
  14. كروكفورد، دوغلاس، 2008. جافا سكريبت: الأجزاء الجيدة . دار نشر أورايلي ميديا ​​وياهو! الفصل 4، الدوال ، صفحة 28. ISBN 978-0-596-51774-8
  15. باول، توماس أ، وشنايدر، فريتز، 2012. جافا سكريبت: المرجع الكامل، الطبعة الثالثة. ماكجرو هيل. الفصل 5، الدوال ، الصفحات 170-171 . ISBN 978-0-07-174120-0
  16. غودمان، داني، مع موريسون، مايكل، 2004. كتاب جافا سكريبت المقدس، الطبعة الخامسة. دار نشر وايلي، إنديانابوليس، الولايات المتحدة الأمريكية. الفصل 33، الدوال والكائنات المخصصة ، صفحة 987. ISBN 0-7645-5743-2
  17. شبكة مطوري موزيلا : Window.self
  18. شبكة مطوري موزيلا : واجهة برمجة تطبيقات عامل الويب
  19. شبكة مطوري موزيلا : globalThis
  20. "البرمجة بلغة لوا : 16" . 
  21. msdn. "PowerShell: حول المتغيرات التلقائية" . docs.microsoft.com . تم الاطلاع عليه بتاريخ 22-03-2018 .
  22. msdn. "about_Classes" . docs.microsoft.com . تم الاطلاع عليه بتاريخ 17-12-2018 .
  23. توحيد الأنواع والفئات في بايثون 2.2، غيدو فان روسوم، " تجاوز طريقة __new__ "

للمزيد من القراءة

  • مايرز، سكوت، 1995. لغة سي++ أكثر فعالية: 35 طريقة جديدة لتحسين برامجك وتصاميمك . ISBN 0-201-63371-Xسكوت مايرز
  • ستروستروب، بيارن، 1994. تصميم وتطور لغة C++ . دار نشر أديسون-ويسلي. رقم ISBN 0-201-54330-3بيارن ستروستروب