في الخلط مع قسم استدعاءات وظيفة مواصفات لغة ECMASCRIPT
-
02-10-2019 - |
سؤال
أنا أقرأ مواصفات لغة ecmascript قسم مكالمات الوظائف
هل يمكن لشخص ما إعادة صياغة أو مفصلة أن يشرح المجال التالي بالنسبة لي؟
الإنتاج callexpression: يتم تقييم وسيطات memberexpression على النحو التالي:
- تقييم 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
الجزء مهم ، لأنه يأتي في وقت لاحق.
إليك الاقتباس الكامل من أحدث المواصفات (الرابط الخاص بك هو الإصدار الثالث ، الذي تم إخراجه من قبل الطبعة الخامسة; ؛ هذا لم يتغير كثيرا):
- اجعل المرجع نتيجة لتقييم memberexpression.
- دع func يكون getValue (المرجع).
- دع Arglist يكون نتيجة لتقييم الوسائط ، وإنتاج قائمة داخلية لقيم الوسيطة (انظر 11.2.4).
- إذا كان النوع (FUNC) ليس كائنًا ، فقم بإلقاء استثناء من النوع.
- إذا كان isCallable (FUNC) خطأ ، فقم بإلقاء استثناء من النوع.
- إذا كان النوع (المرجع) مرجعًا ، فعندئذٍ
أ. إذا كان الأمر صحيحًا (المرجع) صحيح ، فعندئذٍ
أنا. دع هذا التقييم يكون getBase (المرجع).
ب. وإلا ، قاعدة المرجع هي سجل البيئة
أنا. فليكن هذه النتيجة نتيجة لاستدعاء طريقة الخرسانة الضمنية لـ GetBase (المرجع).- آخر ، النوع (المرجع) غير مرجع.
أ. دع هذا هو غير محدد.- أعد نتيجة استدعاء الطريقة الداخلية [[Call]] على FUNC ، وتوفير هذه القيمة كقيمة هذه القيمة وتوفير قائمة Arglist كقيم وسيطة.
كما ترون، john
يأتي مرة أخرى في 6 (أ) لأن التعبير هو مرجع خاصية ، لذلك this
القيمة john
(بدلاً من الكائن العالمي ، كما سيكون إذا دعت هذا ليس من خلال مرجع الملكية).
إذا كنت تقرأ المواصفات ، فإنني أوصي بقراءة أحدث واحد بدلاً من الإصدار الأقدم (لا يوجد إصدار HTML حتى الآن). أخشى أن النثر ليس أقل من تورجيد. :-)