I used a similar pattern once, except _generically_ as follows:
function Breakfast(my, args) {
if (!(this instanceof arguments.callee)) return new arguments.callee(arguments);
if (Object.prototype.toString.call(arguments[0]) === '[object Arguments]') arguments.callee.apply(this, args);
}
Unfortunately it wasn't there from day one. It was only specified a year or two ago (thus IE 8 and Opera 11.50 didn't have it, and apparently Safari 5.1 still doesn't) so you have to be prepared to check for it and roll your own.