@dovid כתב בהגדרת מתודה של אובייקט ב-JS:
לא הייתה פה שאלה מעשית
אכן
הקוד הזה בלבל אותי לכמה דקות טובות
בניגוד למושכל הראשון שלי (ומן הסתם בניגוד לכוונת המתכנת שכתב את זה), המילה function בקוד הזה הוא לא מילת מפתח אלא שם של שדה.
אגב, בעוד שאני עובד על הבנת הקוד ראיתי דבר שלא ידעתי מקודם:
יש שני הבדלים ב-JS בין פונקציה למתודה
פונקציה
let x = {
foo: function() {}
}
יכול להיות constructor. כלומר, הקוד הזה לא יזרוק שגיאה: new x.foo
לא יכול להשתמש במילת המפתח super
מתודה
let x = {
foo() {}
}
לא יכול להיות בנאי, הקוד: new x.foo יזרוק שגיאה
יכול להשתמש במילת המפתח super כדי לציין את הפרוטוטייפ שלו. האיגוד של super לפורטוטייפ הוא סטטי וזה לא משתנה לפי צורת הקריאה של הפונקציה, בניגוד לאיגוד של this