Sto scrivendo un'API JavaScript e, per un caso particolare, mi chiedo quale approccio sia il più sexy. Facciamo un esempio: scrivendo un VideoPlayer
, aggiungo un metodo getCurrentTime
che dà il tempo trascorso dall'inizio.
-
Il primo approccio dichiara semplicemente
getCurrentTime
come segue:getCurrentTime():number
dove
number
è il tipo numero nativo . Questo approccio include un eventoCURRENT_TIME_CHANGED
in modo che gli utenti API possano aggiungere callback per essere al corrente delle variazioni di orario. L'ascolto di questo evento sarebbe il seguente:myVideoPlayer.addEventListener(CURRENT_TIME_CHANGED, function(evt){ console.log ("current time = "+evt.getDispatcher().getCurrentTime()); });
-
Il secondo approccio dichiara
getCurrentTime
in modo diverso:getCurrentTime():CustomNumber
dove
CustomNumber
è un oggetto numero personalizzato , non quello nativo. Questo oggetto personalizzato invia un eventoVALUE_CHANGED
quando il suo valore cambia, quindi non c'è bisogno dell'eventoCURRENT_TIME_CHANGED
! Basta ascoltare l'oggetto restituito per le variazioni di valore! L'ascolto di questo evento sarebbe il seguente:myVideoPlayer.getCurrentTime().addEventListener(VALUE_CHANGED, function(evt){ console.log ("current time = "+evt.getDispatcher().valueOf()); });
Tieni presente che
CustomNumber
ha un metodovalueOf
che restituisce un numero nativo che consente di utilizzare l'oggettoCustomNumber
restituito come numero, quindi:var result = myVideoPlayer.getCurrentTime()+5;
funzionerà!
Quindi nel primo approccio, ascoltiamo un oggetto per un cambiamento nel valore della sua proprietà. Nella seconda ascoltiamo direttamente la proprietà per cambiare il suo valore. Ci sono più pro e contro per ogni approccio, voglio solo sapere quale degli sviluppatori preferirebbe usare!