making |this| an error (was Re: for own(...) loop)

Peter van der Zee ecma at qfox.nl
Wed Nov 9 07:22:14 PST 2011


The forEach method might not do what you expect it to. This can not be
statically determined.

- peter
On 9 Nov 2011 16:10, "John J Barton" <johnjbarton at johnjbarton.com> wrote:

> On Wed, Nov 9, 2011 at 3:41 AM, David Bruant <bruant.d at gmail.com> wrote:
> > Le 09/11/2011 02:26, Andrew Paprocki a écrit :
> >>
> >> On Tue, Nov 8, 2011 at 6:36 PM, Brendan Eich<brendan at mozilla.com>
>  wrote:
> >>>
> >>> Ignoring performance, a lot of stylish JS hackers use
> >>> Object.keys(o).forEach. How many run into the wrong |this|
> >>> (arguments/break/continue/return)? Not clear. Something to study.
> >>
> >> I was curious so I did some grok-ing across my code sample and
> >> Object.keys() is barely used. The usage of the |for in| construct is 2
> >> orders of magnitude larger than the usage of hasOwnProperty(),
> >> supporting the thought that no one really does it the "right" way.
> >>
> >> The MDN page for Object.keys does not talk about |this| being wrong in
> >> certain situations. If you could elaborate on that, it would be
> >> helpful to know.
> >
> > The |this| differs between the body of a for-in and the argument
> callback in
> > the .forEach. Nothing to do with Object.keys. .forEach has a second
> optional
> > argument which is the value to be used as |this| so that you don't have
> to
> > do a .bind.
>
> I'm sure this has been discussed before, but isn't is possible and
> desirable to make |this| illegal in "using strict;" when it can be
> determined from the AST alone that |this| will bind to |window|?  eg:
>
>   Object.keys(foo).forEach(function(key) {
>     // this is undefined-> window
>   });
>
> This case kind of case is because, as others have noted, incorrect
> |this| binding most often occurs in two cases: 1) mixed OO and
> functional programming (as above) and 2) callback defn.
>
> Perhaps it is harder to detect than I think.
>
> jjb
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20111109/2f7f4e2b/attachment.html>


More information about the es-discuss mailing list