¿Cuál es la diferencia entre un objeto diferido y su propio objeto de promesa?

Creemos un objeto diferido simple:

defer = $.Deferred( function ( defer ) {
    setTimeout( defer.resolve, 3000 );
});

El objeto diferido anterior estará en el estado "pendiente" durante 3 segundos y luego cambiará al estado "resuelto" (en ese momento se invocarán todas las devoluciones de llamada vinculadas a él).

Recuperemos también la promesa de ese objeto diferido:

promise = defer.promise();

Ahora, para agregar devoluciones de llamada que se invocarán una vez que se resuelva el objeto diferido, podemos usar.done() o.then(). Sin embargo, podemos invocar este métodoambo en el propio objeto diferido o en su propio objeto de promesa.

defer.then( handler );

promise.then( handler );

En ambos casos, lahandlere invocará la función @ (después de 3 segundos en este caso).

Si usamos$.when, podemos pasar nuevamente el objeto diferido en sí mismo o su objeto de promesa:

$.when( defer ).then( handler );

$.when( promise ).then( handler );

De nuevo, no hay diferencia entre las dos líneas de código anteriores.

Demo en vivo http: //jsfiddle.net/G6Ad6

Entonces, mi pregunta es ya que podemos invocar a.then(), .done(), etc. en el objeto Deferre, d en sí y dado que podemos pasar ese objeto diferido a$.when(), Cuál es el punto de.promise() y recuperar el objeto prometido? ¿Cuál es el propósito del objeto de promesa? ¿Por qué hay esta redundancia en la funcionalidad?

Respuestas a la pregunta(3)

Su respuesta a la pregunta