I'm currently developing a JavaScript parser and study the ECMAScript 5.1 specification. Here's a question which puzzles me at the moment.
§ 11.2 Left-Hand-Side Expressions defines the following NewExpression
production:
NewExpression :
MemberExpression
new NewExpression
If I read it correctly, then the NewExpression
may be something like
new new Something
(Actually, any amount of new
s.)
This puzzles me completely. How could new Something
potentialy return anything you could once again new
? Is it possible at all?
I had to use
new new
when using an object as namespace. Though there will be a nicer way:Instead of:
Do this:
Not directly related to the question, but I was googling
new new javascript
, because it looked pretty ugly and wrong. This post can help to avoid this unneeded object creation for fellownew new
Google'ers.Take a look at section 13.2.2 [[Construct]] in the specification. More precisely, step 9 of the algorithm.
Functions are objects, so if you return a function from a function and try to instantiate the latter function using
new
, you'll get back the former function, not a new object. But functions are also constructors, so you cannew
the returned function.It is not common at all, but it is possible; a function that returns a function: