Por qué no podemos llamar a los methods de la class Date () sin un nuevo operador

Supongamos que defino una variable como esta

var today = Date(); console.log(today.getMonth()); // Throw Error 

mientras que otra class como class de error llama a sus methods sin un nuevo operador.

 function factorial(x) { if(x <= 1) throw Error("x must not be negative"); return x*factorial(x-1); } 

También los objects del contenedor (número, boolean, cadena) pueden llamar a sus methods sin un nuevo operador. Entonces, ¿es esta la única class que requiere un nuevo operador o cualquier técnica de creación de objects antes de llamar a sus methods?

Editar: como Date () es un tipo de cadena, por lo que debe llamar a sus methods sin crear objects. Porque el tipo de cadena se comporta como si fueran objects. ¿Entonces por qué no?

Editar 2 : Creo que esta es la única function central que no puede ser igual a la new Date() como otras funciones ( Array(), String(), Error() etc.). Por lo tanto, también es la característica oculta de este error de lenguaje o ECMAScript.

Especificación del lenguaje ECMAScript

De acuerdo con la especificación ECMAScript (en la que se basa Javascript):

Cuando se llama a Date como una function en lugar de como un constructor, devuelve una cadena que representa la hora actual (UTC).

NOTA La function llamada Fecha (…) no es equivalente a la expresión de creación del object nueva Fecha (…) con los mismos arguments.

Referencia: http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.2

Llamar al constructor frente a la function de llamada

Necesita la new porque está creando un nuevo object Date . Llamar simplemente a Date () significa llamar a una function que devuelve Date () como una cadena.

Ver: http://www.javascripture.com/Date

 Date() : String Returns a string representation of the current date and time. 

En el caso de otros types como Array o Error, las funciones son funciones de fábrica que crean un nuevo object y lo devuelven.

Ver:

Es perfectamente válido para una function de constructor de JavaScript para actuar de manera diferente cuando se llama con new o sin. Este es el caso de la function Date que devuelve la date como una cadena cuando se llama sin new y como un object completo cuando se llama con new .

El objective de usar new es crear una instancia que henetworkinga del prototipo de Date.

Eso es lo que hace posible que el object pueda ser el receptor de las funciones de Date.

Cuando usa Date() (que en mi opinión es una function inútil), realmente está obteniendo una cadena que es equivalente a (new Date()).toString() . Por supuesto, este object solo tiene funciones de cadena, no la de Fecha.