Во-первых, MDN не является официальной документацией по Javascript. Хотя это часто полезно, это не является окончательным источником всего, что связано с языком. Эта официальная спецификация будет в спецификации ECMAScript . Вот где определяется грамматика Javascript.
В этом документе есть нечто, называемое MethodDefinition . Существует несколько синтаксисов, которые можно использовать для определения метода. Синтаксис greeting() {}
является одним из таких синтаксисов, который можно использовать для MethodDefinition. Типичное определение буквенного свойства объекта propName: function() {}
- это не так. Вот как это определяется:
Затем, чтобы увидеть, что такое MethodDefinition
, вы идете в раздел 14.3.8 , где он документирует шаги для MethodDefinition
следующим образом:
На шаге 7 он вызывает MakeMethod()
. Если вы перейдете к этой части спецификации , вы увидите, что здесь установлено значение [[HomeObject]]
.
Итак, как вы уже обнаружили, super
полагается на то, что [[HomeObject]]
устанавливается и просматривает спецификацию, это единственный способ установить его. Таким образом, чтобы super
был разрешен, он должен вызвать MakeMethod()
, и единственный способ MakeMethod()
вызывается с одним из приведенных выше синтаксисов, а обычный синтаксис литерала объекта для свойства, такого как propName: fn
, не из них.