making |this| an error (was Re: for own(...) loop)
John J Barton
johnjbarton at johnjbarton.com
Wed Nov 9 07:10:25 PST 2011
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
More information about the es-discuss
mailing list