В дополнение к ответу Даниэля Говарда, вот что делает new
(или, по крайней мере, кажется):
function New(func) {
var res = {};
if (func.prototype !== null) {
res.__proto__ = func.prototype;
}
var ret = func.apply(res, Array.prototype.slice.call(arguments, 1));
if ((typeof ret === "object" || typeof ret === "function") && ret !== null) {
return ret;
}
return res;
}
Пока
var obj = New(A, 1, 2);
эквивалентно
var obj = new A(1, 2);