Lectura a través de la documentación de jQuery sobre el objeto evento y su constructor $.Event()
veo:opcional `operador new`
new
El operador es opcional [al llamar al constructor].
¡Eso es genial! ¿Cómo es que la gente jQuery hizo tal truco?
Lectura a través de la documentación de jQuery sobre el objeto evento y su constructor $.Event()
veo:opcional `operador new`
new
El operador es opcional [al llamar al constructor].
¡Eso es genial! ¿Cómo es que la gente jQuery hizo tal truco?
John Resig explica esto muy bien: http://ejohn.org/apps/learn/#36 y http://ejohn.org/apps/learn/#38
Básicamente, Event
es una función y un objeto (las funciones son objetos). La primera línea de evento verifica si se está llamando como una función o como una instancia del objeto Evento (con el nuevo operador).
Si usted está buscando específicamente cómo jQuery lo hace, mira a la línea 3134-3138 de la jQuery source:
jQuery.Event = function(src, props) {
// Allow instantiation without the 'new' keyword
if (!this.preventDefault) {
return new jQuery.Event(src, props);
}
Y explicación de esto es el the jQuery forms.
Básicamente, en las líneas 3178-3194 el evento preventDefault se agrega al prototipo del evento. Si se crea una instancia del evento con new
, se le asignará este método preventDefault. De lo contrario, no será definido.
Cualquier función de JavaScript definida por el usuario puede invocarse con o con el operador new
. Sin new
, funciona como una función normal (porque es lo que es). Con new
, el intérprete crea un objeto nuevo con el prototipo establecido de forma adecuada, y convierte ese objeto en el parámetro this
de la llamada. Este objeto nuevo es el resultado del operador new
- excepto si el cuerpo de la función return
es un valor explícitamente; entonces el valor devuelto gobierna.
Así que si usted escribe
function foo() {
return { bar: 42 };
}
se le puede llamar ya sea sin o con new
- no hay diferencia porque el cuerpo vuelve siempre explícitamente un valor, y nunca utiliza su this
.
¿Qué es 'this.preventDefault'? – Randomblue
Revisa mi publicación para una actualización. –