AFAIK, using 'new' is not a matter of preference. Omitting the keyword leads to different results. Am I missing something?
That said, I agree that the way "new" specifies the concrete type of the returned value is pure evil. In OO things should be typed according to their interfaces, not according to their concrete implementations.
if (!(this instanceof arguments.callee)) {
return new arguments.callee(/* parms */);
} if(!(this instanceof MyClass)){
return new MyClass(a,b,c)
} "Personally, I’m going to miss arguments.callee,
I used it in a number of places in my code."
-- John Resig (May 22, 2009 at 7:26 am) [1]
----[1]: http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more...