<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Oct 8, 2012, at 7:41 AM, Erik Arvidsson wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>On Sun, Oct 7, 2012 at 11:19 AM, Juan Ignacio Dopazo<br>...<br><blockquote type="cite">I was under the impression that methods would desugar to a named function<br></blockquote><blockquote type="cite">with the same name as the property, but I checked the wiki and there is no<br></blockquote><blockquote type="cite">reference to named functions. Has this been discussed? Is there consensus on<br></blockquote><blockquote type="cite">anonymous/named?<br></blockquote><br>It was agreed that methods would desugar to a named function. It<br>should be in the ES6 draft under Property Definition Evaluation but I<br>don't understand in which step that is described. Allen can probably<br>point out where propName gets added to scope.<br></div></blockquote><div><br></div><div><br></div><div>Concise methods are specified in section 13.3 of the current specification draft.</div><div><br></div><div>At a recent TC39 meeting we discussed the scoping of <i>class names</i> and decide that the class object (the constructor function) would use the same local binding rules for its name as is used by FunctionExpressions/FunctionDeclarations.  Named classes defined using a ClassExpression have a local binding for the class name.  NameClasses defined using a ClassDeclaration do not have such a local binding and instead capture the outer binding created by the declaration.</div><div><br></div><div>I don't believe that we have discussed, at a meeting, property name capture (other than WRT super) of ConciseMethod definitions.  It is however, something that I have thought about  quite a bit.  Concise methods, as currently specified, <b>do not</b> create a local binding for the property name whose value is the function. </div><div><br></div><div>obj = {</div><div>     method () {}</div><div>};</div><div><br></div><div>is (approximately) equivalent to </div><div><br></div><div>obj = {};</div><div>Object.defineProperty(obj,"method", {value: function() {}, enumerable: true, writeable: true, configurable: true});</div><div><br></div><div>rather than</div><div><br></div><div><div>obj = {};</div><div>Object.defineProperty(obj,"method", {value: function method () {}, enumerable: true, writeable: true, configurable: true});</div><div><br></div><div><br></div><div>I need to reconstruct all of the reasons for this.  One is that method "names" are not restricted to being identifiers.  They can also syntactically be strings, numbers, and at-names.  A method name binding that capture a reference to the function also complicates the transfer of a super referencing method from one object to another.</div><div><br></div><div>However, these issues could be dealt with and and I've always seen this as a pretty close call.  Are there strong use cases for giving methods a FunctionExpression-like binding of the property name?</div><div><br></div><div>Allen</div><div><br></div></div></div></body></html>