2010-04-23 6 views
18

Durante la codifica di JavaScript a volte si memorizza il riferimento dell'oggetto this in una variabile locale per scopi diversi (per impostare l'ambito appropriato, per aiutare gli offuscatori di codice, ecc.). Ci sono programmatori che preferiscono l'aliasing this a that per rendere evidente la sua intenzione. Altri ragazzi usano self dato che punta all'oggetto stesso. Ho persino visto i codici sorgente in cui me ha mantenuto il riferimento e ha ancora senso. Certamente ce ne sono altri.che, io o me - quale preferire in JavaScript?

Quale preferisco? C'è una convenzione su cui usare o è solo questione di gusti.

+1

Si noti che lo sfondo di programmazione sembra essere un fattore importante (il principale?) -quelli che usano (d) Smalltalk o Python, o appreso da quelli che li hanno usati, tendono ad usare "sé". – outis

risposta

42

Io personalmente uso that, ma tutto ciò che è chiaro va bene.

non userei self perché la variabile globale/window -property self esiste già come un riferimento a window. Anche se è del tutto inutile (quindi nessuno rischia di cura che si sta shadowing esso), si aumenta leggermente il rischio di errori stupidi andare inosservato:

var se1f= this;   // mis-spelled (perniciously). or maybe you just forgot to write line 
onclick= function() { 
    self.foo= 1;  // whoops, just wrote to `window`! 
}; 

considerando quanto segue:

var thot= this; 
onclick= function() { 
    that.foo= 1;  // error thrown 
}; 

Un po 'forzato, ma JavaScript è così sciatto che lascia che gli errori scivolino e non vuoi più farlo.

+0

Un altro inconveniente sta dimenticando 'var' quando si assegna a' self'. IE * odia * questo. –

+0

Sì, buon vecchio IE e il suo divertente compito di assegnare a una finestra. Tuttavia, almeno genera un errore per farti sapere che hai fatto una pratica sbagliata. Anche se il messaggio di errore è irrimediabilmente fuorviante. – bobince

2

C'è un'arancia nel cestino delle mele lì, this ha un significato contestuale molto specifico. La scelta è in realtà tra self e me di quelle opzioni. Tra quelli ... tu scegli, non importa in alcun modo solo le preferenze personali.

this fa riferimento al contesto in cui ci si trova, quindi non è davvero una "opzione" senza introdurre molta confusione e errori facili da fare. Vedo self utilizzato molto più di me (nel codice di esempio, framework, librerie, ecc.). È solo una preferenza, ma sono d'accordo self è più attraente, non so perché ... ancora solo mia preferenza.

+2

Mi piace 'me' perché sono due lettere in meno da digitare ... ma in realtà non importa finché sei * coerente *. –

+2

@codeka - ottimo punto, la coerenza è * lontano * più importante della scelta del nome qui –

+2

Concordato sul punto di consistenza. Potrebbe anche essere che la scelta tradisca l'esperienza di un programmatore in altre lingue. 'self' è la versione di Delphi di' this' e 'me' è la versione di VB. Per quanto ne so, 'that' non è usato in nessun'altra lingua. –

1

Beh, personalmente sto cercando di migliorare nel rendere la variabile significhi qualcosa di più di "quella cosa di cui ho bisogno in seguito". Spesso hai bisogno di quelle variabili temporanee in situazioni che diventano un po 'nodose; potrebbero esserci due o più livelli di file temporanei di this di cui tenere traccia.

Così, ad esempio in una configurazione jQuery, potrei usare qualcosa di nota il tipo di elemento che una temporanea this scorta dovrebbe tenere:

$('form').each(function() { 
    var $form = $(this); 
    $form.find('input:checkbox').each(function() { 
    var $checkbox = $(this); 
    // ... 
    }); 
}); 

Utilizzando il prefisso "$" sulle variabili è un bel modo per tenere traccia di se l'oggetto è stato "jQuery-ized" o meno :-)

Problemi correlati