I don't understand. The prompt is given as 4 lines:
x
= 1
x
--> 0
which does not execute. And if I run them as two lines:
x = 1
x --> 0
then the final output is `true`. `1` is only output during the initial assignment, which is hardly surprising
If i understand correctly, the reason i am getting `true` is because the second line gets parsed as two operations:
(x--) > 0
first a post-decrement operator (--) followed by a comparison (greater than). Since x = 1 it's greater than 0 (true), but afterward it's decremented so you'll get false if you run the same line again
I forgot you could use SGML comments in JS in 1995, so read it as a postdecrement and inequality returning true. Don't feel too bad about that here 30 years on, if I'm honest.
Fun wart. Been a couple of decades or so since I last wrapped <script> contents like that but not long enough that I didn't have a correct suspicion about the execution result.
For folks wondering why: this is because a class is (approximately) syntactic sugar for defining a constructor function, and the constructor of a function is `Function`, and calling `Function(string)` is an implicit eval.
John is (approximately) a reference to a desugaring of its `constructor` “method” (which is the term I see used on MDN, I would have expected something more akin to “constructor declaration”; not 100% sure what the spec terminology is and don’t have time to chase it down atm) + its instance members assigned to the desugared function’s prototype. It’s more complicated than that for… reasons.
But the gist is that John.constructor references something other than the constructor defined in the class body, so calling that reference doesn’t call the thing it doesn’t reference at all.
reply