Supponi di creare il tipo di dati e di esporne il comportamento.Javascript: quali sono alcune linee guida su come definire nuovi tipi di dati?
Può darci qualche esempio di quando si usa:
una funzione & nuova:
// define new data type var CustomDataType= function(){ this.a='whatever'; this.doX= function(){/*some code*/}; } // create a new instance of our custom data type var obj= new customDataType();
un oggetto letterale & Object.create:
// define new data type var customDataType = { a: 'whatever', doX: function(){/*some code*/} } // create a new instance of our custom data type var obj= Object.create(customDataType);
una funzione che ti costruisce r oggetto:
function customDataTypeFactory(options){ return { a: 'whatever', doX: function(){/*some code*/} } }; // create a new instance of our custom data type var obj= customDataTypeFactory(options);
sento che questo potrebbe essere etichettato duplicato per: new
vs Object.create
ma il mio interesse principale non è in discussione che uno è meglio, ma piuttosto di sapere se ci sono casi di utilizzo specifici in cui si dovrebbe essere preferito agli altri.
Ho letto molti post su domande correlate e il libro di Crockford: Javascript: le parti buone. Finora ho concluso che è una questione di preferenza, il consiglio di Crockford risuona molto con me per me: "cerca di evitare le caratteristiche che sono pericolose e non necessarie" ... Sto parlando di new
.
La prima e la terza versione mettono le proprietà direttamente sul nuovo oggetto. Nella tua seconda versione, l'oggetto eredita le proprietà. Non so che ci sia una risposta concreta alla tua domanda. Il primo usa un costruttore se invochi l'uso di 'new', e' instanceof' funzionerà per identificare quell'oggetto.Il terzo non richiede l'uso di 'new', ma' instanceof' non sarà così utile. Il secondo eredita di nuovo le proprietà, quindi la creazione di più oggetti in questo modo condividerà tutti i dati e tutti gli oggetti osserveranno gli aggiornamenti dell'oggetto ereditato. –
... e non essere troppo preso dagli avvertimenti di pericolo di Crockford. Penso che si preoccupi un po 'troppo. Voglio dire, prendi tutto, ma prendilo con un pizzico di sale. –
'this.doX =' dovrebbe essere 'doX:' negli ultimi due snippet –