Это нормальное поведение операции new, которое описано в стандарте языка.
Операция new создаёт новый объект и вызывает функцию-конструктор, привязав её к созданному объекту.
Если функцию-конструктор возвращает НЕ объект (а в JavaScript, всё, что не примитивные типы, это объекты, включая функции, массивы, даты и прочее), то результатом операции new будет созданный ею объект.
Если функцию-конструктор возвращает любой объект, то результатом операции new будет переданный ей функцией-конструктором объект, а не тот объект, который она (операция new) создала.
Вот, например, массив:
function $test(a, b)
{
this.prop1 = a;
this.prop2 = b;
return [1,2,3,4];
}
var ObjTst = new $test(1, false);
var lst = 'Тип: ' + typeof ObjTst + '\nКонструктор: ' + ObjTst.constructor + '\n\n';
for(i in ObjTst)
{
lst += "Имя св-ва: " + i + "\tЗначение св-ва: " + ObjTst[i] + "\n";
}
WScript.Echo(lst);
В варианте с "return arguments.callee;" результатом функции-конструктора является объект типа "Функция", которые есть наследник типа "Объект", поэтому возвращается ссылка на него, а не на созданный объект.