In javascript, le proprietà dell'oggetto devono essere dichiarate in cima alla funzione?

1

Ho imparato che è buona pratica dichiarare le variabili prima che vengano utilizzate. Ad esempio:

function myFunction() {
  var i;
  var j;
}

La stessa cosa vale per le proprietà degli oggetti, e c'è un modo consueto / best practice per farlo? Perché a volte non conosciamo i valori di tutte le proprietà quando dichiariamo l'oggetto. Ma se non li dichiariamo in anticipo (e impostiamo su null per esempio), sembra che possiamo facilmente perdere traccia di ciò che è contenuto nell'oggetto:

function myFunction2() {
  var car = {};

  // some conditional code here fetching car data
  car.make = APIResponse.car.make;
  car.color = APIResponse.car.color;
  // even more code, before we can know another car property
  car.isLemon = isLemonAPIResponse;
}

Dovrebbe essere invece qualcosa del tipo:

function myFunction2() {
  var car = {
      make: APIResponse.car.make, // we can get this value right away so why not assign it
      color: APIResponse.car.color, // same here
      isLemon: null // this will be true or false once we find out, null means it's not set
  };
}

O dovrebbe essere un altro modo?

    
posta CodeVirtuoso 23.05.2015 - 10:32
fonte

2 risposte

1

Né è intrinsecamente migliore dell'altro. Usa quello più leggibile.

Nel tuo esempio, in cui puoi ottenere immediatamente tutti i valori e costruire l'oggetto in un'espressione letterale di un singolo oggetto, non vedo assolutamente alcun motivo per non farlo. Se ottenere ogni proprietà fosse un esercizio non banale, o ci sono molte proprietà che l'oggetto finale può avere o non avere, oppure ci sono oggetti all'interno di oggetti, allora sarei più propenso a iniziare con var x = {}; e riempirlo in uno proprietà alla volta.

È importante sottolineare che la ragione per cui le persone consigliano di dichiarare le variabili nella parte superiore della funzione in Javascript è dovuta alla sollevamento delle variabili . In poche parole, ciò significa che qualsiasi dichiarazione di variabile all'interno di una funzione viene effettivamente "issata" all'inizio della funzione senza che tu te ne accorga. Personalmente, preferisco comunque dichiarare le mie variabili nello scope in cui le uso effettivamente, proprio come in C ++, ma al lavoro abbiamo linters come JSHint che mi urlerà se accidentalmente scriverò un codice che si riferisce a quella variabile al di fuori dell'ambito del blocco L'ho dichiarato, o se lo ripeto in un altro scope (un tipico esempio sarebbe scrivere due cicli for che iniziano entrambi con var i = 0; ), quindi in pratica non mi sono mai morso da questo problema.

Poiché i membri oggetto non sono variabili dichiarate, ma piuttosto proprietà di una variabile, il sollevamento non influisce su di essi in nessuno dei vostri esempi, quindi non ha alcuna incidenza su come dovreste costruire il vostro oggetto. Solo se stavi costruendo il tuo oggetto come var x = {}; var a = 2; x.prop = a; il "sollevamento di membri" diventerebbe un problema.

    
risposta data 23.05.2015 - 11:04
fonte
1

Non esiste un modo "corretto" per farlo, poiché funzionerà perfettamente. Dipende interamente da ciò che rende il tuo codice il più semplice da scrivere, capire e mantenere.

Se conosco già i valori delle proprietà dell'oggetto al momento della dichiarazione dell'oggetto, trovo che in genere rende il codice un po 'più auto-descrittivo se inserisco le proprietà conosciute all'interno della dichiarazione dell'oggetto iniziale.

Se, d'altra parte, potrebbe essere necessario calcolare il nome di una proprietà o se c'è un codice significativo coinvolto nel capire quale potrebbe essere il valore di una proprietà, allora trovo che il codice è più pulito se assegno la proprietà più avanti nella funzione.

    
risposta data 23.05.2015 - 10:47
fonte