First off, MDN is not official Javascript documentation. While it's often helpful, it's not the definitive source for anything related to the language. That official specification would be in the ECMAScript specification. That's where the Javascript grammar is defined.
In that document, there is something called a MethodDefinition. There are several syntaxes that can be used for a method definition. The greeting() {}
syntax is one such syntax that can be used for a MethodDefinition. The typical object literal property definition of propName: function() {}
is not. Here's how it is defined:
Then, to see what a MethodDefinition
is, you go to section 14.3.8 where it documents the steps for a MethodDefinition
as follows:
In Step 7, it calls MakeMethod()
. If you go to that part of the specification, you will see that's where the [[HomeObject]]
value gets set.
So, as you've already discovered super
relies on [[HomeObject]]
being set and perusing the specification, this is the only way that it gets set. So, for super
to be allowed, it has to call MakeMethod()
and the only way MakeMethod()
gets called is with one of the above syntaxes and a regular object literal syntax for a property such as propName: fn
is not one of them.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…