Why [[HomeObject]] is different in shorthand syntax of method?

馋奶兔 提交于 2019-11-30 23:47:23

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!