Re:Idle Until Urgent
by theandrewbailey on Thursday September 20, 2018 @08:51AM
(#18031951)
I guess I'm an old man that hasn't smoked the hype, but I don't understand why one would write this:
over this:
[ Parent
| on HN ]
JavaScript is a minefield of unexpected behavior when you try things like this. Besides the issue with this-binding already mentioned in the thread, there are other examples of weird stuff that happens when you don't introduce an apparently redundant lambda:
> ['10', '10', '10', '10', '10'].map(parseInt)
[ 10, NaN, 2, 3, 4 ]
> ['10', '10', '10', '10', '10'].map(x => parseInt(x))
[ 10, 10, 10, 10, 10 ]Ok this was a 'wat' moment for me until I realized that map passes up to 3 args to the function, including index, and parseint accepts a radix parameter. Still kinda weird/unintuitive, I could see myself not paying attention and reducing to the first example accidentally.
Re:Idle Until Urgent
by kristjansson on Thursday September 20, 2018 @12:18PM
(#18033568)
> I’ve heard something about a surprise principle in API design. Principle of most surprise I think it was? Let’s go with that.
The design process of this, I imagine.
I lol'd. Downvote away haters, sometimes you gotta laugh.
I'll take C++ UB every day over this
Huh, I'm the opposite. I'd gladly take a confusing combination of consistent spec'd behavior over time travel, arbitrary code execution, and nasal demons.
> I'd gladly take a confusing combination of consistent spec'd behavior over time travel, arbitrary code execution, and nasal demons.
the point of UB is that you can tell your compiler to transform it into a specific behaviour -e.g., an assert with -fsanitize=undefined for instance.
Re:Idle Until Urgent
by marcosdumay on Thursday September 20, 2018 @05:38PM
(#18035674)
Well, at least with a consistent spec you can create a compiler for a good language.
Somehow, undefined behavior in C is a much smaller problem than it looks like. But the principle still applies.
Re:Idle Until Urgent
by streptomycin on Thursday September 20, 2018 @08:53AM
(#18031978)
The 2nd style will not work if those functions internally use `this` and were not previously manually bound to their parent objects, like `drawer.init.bind(drawer)`.
Presumably if you were going to write the latter, you'd also write your init() functions accordingly?
If you didn’t write the init functions you don’t have a choice
If we were talking about a different situation then we'd be discussing a different article.
Due to javascript's funky notion of object methods. If you just pass the function reference itself invoking it will execute it with a |this| set to undefined.
Put differently, a property access x = foo.bar followed by x() is not the same as foo.bar()
The default this context would be the global window object (in the browser).
Not in strict mode
This.
How long have you waited for this?
Re:Idle Until Urgent
by bryanrasmussen on Thursday September 20, 2018 @10:43AM
(#18032759)
probably as long as I've waited for that.
I can't figure out if the pun was intended.
Come on, give avip some credit! That's one of the best comments ever to appear on HN.
Only because of the context.
All greatness depends on the context.
Especially “this”.