في الخلط مع قسم استدعاءات وظيفة مواصفات لغة ECMASCRIPT

StackOverflow https://stackoverflow.com/questions/2738736

  •  02-10-2019
  •  | 
  •  

سؤال

أنا أقرأ مواصفات لغة ecmascript قسم مكالمات الوظائف

هل يمكن لشخص ما إعادة صياغة أو مفصلة أن يشرح المجال التالي بالنسبة لي؟

الإنتاج callexpression: يتم تقييم وسيطات memberexpression على النحو التالي:

  1. تقييم memberexpression.

لنأخذ هذا الرمز كمثال.

var john = { 
  name: 'John', 
  greet: function(person) { 
    alert("Hi " + person + ", my name is " + this.name); 
  } 
}; 

john.greet("Mark");

خذ الرمز أعلاه كمثال ، ماذا يعني الإنتاج callexpression؟ ما هو Memberexpression في هذه الحالة ، John.greet؟

شكرًا!

هل كانت مفيدة؟

المحلول

memberexpression هو john.greet. في الأساس ما تقوله هو: الخطوة 1: اكتشف الوظيفة التي يجب الاتصال بها. :-) ال john الجزء مهم ، لأنه يأتي في وقت لاحق.

إليك الاقتباس الكامل من أحدث المواصفات (الرابط الخاص بك هو الإصدار الثالث ، الذي تم إخراجه من قبل الطبعة الخامسة; ؛ هذا لم يتغير كثيرا):

  1. اجعل المرجع نتيجة لتقييم memberexpression.
  2. دع func يكون getValue (المرجع).
  3. دع Arglist يكون نتيجة لتقييم الوسائط ، وإنتاج قائمة داخلية لقيم الوسيطة (انظر 11.2.4).
  4. إذا كان النوع (FUNC) ليس كائنًا ، فقم بإلقاء استثناء من النوع.
  5. إذا كان isCallable (FUNC) خطأ ، فقم بإلقاء استثناء من النوع.
  6. إذا كان النوع (المرجع) مرجعًا ، فعندئذٍ
    أ. إذا كان الأمر صحيحًا (المرجع) صحيح ، فعندئذٍ
    أنا. دع هذا التقييم يكون getBase (المرجع).
    ب. وإلا ، قاعدة المرجع هي سجل البيئة
    أنا. فليكن هذه النتيجة نتيجة لاستدعاء طريقة الخرسانة الضمنية لـ GetBase (المرجع).
  7. آخر ، النوع (المرجع) غير مرجع.
    أ. دع هذا هو غير محدد.
  8. أعد نتيجة استدعاء الطريقة الداخلية [[Call]] على FUNC ، وتوفير هذه القيمة كقيمة هذه القيمة وتوفير قائمة Arglist كقيم وسيطة.

كما ترون، john يأتي مرة أخرى في 6 (أ) لأن التعبير هو مرجع خاصية ، لذلك this القيمة john (بدلاً من الكائن العالمي ، كما سيكون إذا دعت هذا ليس من خلال مرجع الملكية).

إذا كنت تقرأ المواصفات ، فإنني أوصي بقراءة أحدث واحد بدلاً من الإصدار الأقدم (لا يوجد إصدار HTML حتى الآن). أخشى أن النثر ليس أقل من تورجيد. :-)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top