<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div>A good point (independently of classes): why change the value of `this`?</div><div><br></div><br><div><div>On Aug 3, 2014, at 20:19 , John Barton <<a href="mailto:johnjbarton@google.com">johnjbarton@google.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr">Since I guess not too many developers work with ES6 and the Loader object, here is some feedback: the Loader callback design does not play well with ES6 classes.<div><br></div><div>The Loader takes 'options', an object with function properties like normalize, locate, and fetch. If you pass a literal object with function properties, it works fine.</div>
<div><br></div><div>If you pass an instance of a class, then you discover that the Loader calls these functions with 'this' bound to the Loader, not the 'options' object. </div><div><br></div><div>There isn't a simple way around this as far as I know. The options functions don't have access to the options object, only module-state and global. So you're stuck with the awkward:</div>
<div>   var loader = new Loader({</div><div>      normalize: options.normalize.bind(options),</div><div>      locate: options.locate.bind(locate),</div><div>      etc,</div><div>   };</div><div>I guess you can give up on ES6 inheritance and create the hook instances by old-school JS, but that is even more annoying.  Or maybe there is something else I've not thought of?</div>
<div><br></div><div>jjb</div></div>
_______________________________________________<br>es-discuss mailing list<br><a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br>https://mail.mozilla.org/listinfo/es-discuss<br></blockquote></div><br><div apple-content-edited="true">
<div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div style="color: rgb(0, 0, 0); letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">-- <br>Dr. Axel Rauschmayer<br><a href="mailto:axel@rauschma.de">axel@rauschma.de</a><br>rauschma.de<br></div><br></div></div><br class="Apple-interchange-newline">
</div>
<br></body></html>