Migliori pratiche Javascript orientate agli oggetti?

Mi sto ritrovando a scrivere un grande progetto in Javascript. Ricordo che l’ultima era una vera avventura perché JS hacky può diventare rapidamente illeggibile e voglio che questo codice sia pulito.

Bene, sto usando gli oggetti per build una lib, ma ci sono diversi modi per definire le cose in JS, implicando conseguenze importanti nell’ambito, la gestione della memoria, lo spazio dei nomi, ecc.

  • usando var o no;
  • definire le cose nel file o in uno (function(){...})() , stile jquery;
  • usando this o no;
  • usando la function myname() o myname = function() ;
  • definire metodi nel corpo dell’object o utilizzare “prototype”;
  • eccetera.

Quindi quali sono le migliori pratiche quando si codifica in OO in JS?

Le spiegazioni accademiche si aspettavano davvero qui. Collegamento ai libri caloroso benvenuto, purché si occupi di qualità e robustezza.

MODIFICARE :

Ho alcune letture, ma sono ancora molto interessato alle risposte alle domande precedenti e alle migliori pratiche.

Usando `var` o no

Dovresti introdurre qualsiasi variabile con l’istruzione var , altrimenti arriva allo scope globale.

Vale la pena ricordare che in strict mode ( "use strict"; ) le assegnazioni di variabili non dichiarate lancia ReferenceError .

Al momento JavaScript non ha un ambito di blocco. La scuola di Crockford ti insegna a mettere le istruzioni var all’inizio del corpo della funzione , mentre Dojo’s Style Guide legge che tutte le variabili dovrebbero essere dichiarate nel più piccolo ambito ansible . (L’ enunciato e la definizione di enunciati introdotti in JavaScript 1.7 non fanno parte dello standard ECMAScript.)

È buona norma bind le proprietà degli oggetti utilizzati con regolarità alle variabili locali poiché è più veloce rispetto alla ricerca dell’intera catena di ambito. (Vedi Ottimizzazione di JavaScript per prestazioni estreme e basso consumo di memoria .)

Definire le cose nel file, o in un `(function () {…}) ()`

Se non è necessario raggiungere gli oggetti al di fuori del codice, è ansible avvolgere l’intero codice in un’espressione di funzione: si chiama modello del modulo. Offre vantaggi in termini di prestazioni e consente inoltre di ridurre e oscurare il codice a un livello elevato. Puoi anche assicurarti che non inquini lo spazio dei nomi globale. Le funzioni di wrapping in JavaScript consentono anche di aggiungere un comportamento orientato all’aspetto. Ben Cherry ha un articolo approfondito sul modello del modulo .

Usando `questo` o no

Se usi l’ereditarietà pseudo-classica in JavaScript, puoi quasi evitare di usarlo. È una questione di gusti quale modello di ereditarietà usi. Per altri casi, controlla l’articolo di Peter Michaux sui widget JavaScript senza “questo” .

Usando `function myname ()` o `myname = function ();`

function myname() è una dichiarazione di funzione e myname = function(); è un’espressione di funzione assegnata alla variabile myname . La seconda forma indica che le funzioni sono oggetti di prima class e puoi fare qualsiasi cosa con esse, come con una variabile. L’unica differenza tra di loro è che tutte le dichiarazioni di funzione sono issate in cima allo scope, il che può essere importante in certi casi. Altrimenti sono uguali. function foo() è una forma abbreviata. Ulteriori dettagli sul sollevamento possono essere trovati nell’articolo JavaScript Scoping e sollevamento .

Definire metodi nel corpo dell’object o usare “prototipo”

Tocca a voi. JavaScript ha quattro pattern di creazione dell’object: pseudo-classico, prototipico, funzionale e parti ( Crockford, 2008 ). Ognuno ha i suoi pro e contro, vedere Crockford nei suoi discorsi video o ottenere il suo libro The Good Parts come Anon già suggerito .

Frameworks

Ti suggerisco di prendere alcuni framework JavaScript, studiarne le convenzioni e lo stile e trovare quelle pratiche e modelli che meglio si adattano a te. Ad esempio, Dojo Toolkit fornisce un solido framework per scrivere codice JavaScript orientato agli oggetti che supporta anche l’ereditarietà multipla.

Patterns

Infine, c’è un blog dedicato ad esplorare modelli JavaScript comuni e anti-pattern . Consulta anche la domanda Esistono standard di codifica per JavaScript? in overflow dello stack.

Ho intenzione di scrivere alcune cose che ho letto o messo in applicazione da quando ho fatto questa domanda. Quindi la gente che la legge non si sentirà frustrata, poiché la maggior parte delle risposte sono RTMF sotto mentite spoglie (anche se devo ammettere, i libri suggeriti SONO buoni).

Utilizzo del Var

Si suppone che qualsiasi variabile sia già dichiarata nell’ambito più elevato in JS. Quindi, quando mai vuoi una nuova variabile, dichiarala per evitare brutte sorprese come manipolare una var globale senza accorgertene. Pertanto, usa sempre la parola chiave var.

In un object make, var la variabile private. Se vuoi solo dichiarare una variabile pubblica, usa this.my_var = my_value per farlo.

Dichiarazione dei metodi

In JS, sono numerosi modi di dichiarare metodi. Per un programmatore OO, il modo più naturale e tuttavia efficace è utilizzare la seguente syntax:

All’interno del corpo dell’object

 this.methodName = function(param) { /* bla */ }; 

C’è un inconveniente: le funzioni interne non saranno in grado di accedere a “questo” a causa del divertente scope JS. Douglas Crockford raccomanda di bypassare questa limitazione usando una variabile locale convenzionale chiamata “that”. Così diventa

 function MyObject() { var that = this; this.myMethod = function() { jQuery.doSomethingCrazy(that.callbackMethod); }; }; 

Non fare affidamento sul fine linea automatico

JS tenta di aggiungere automaticamente ; alla fine della linea se lo dimentichi. Non fare affidamento su questo comportamento, poiché otterrai errori che creano problemi nel debug.

Per prima cosa dovresti leggere la programmazione basata sul prototipo in modo da sapere quale tipo di bestia hai a che fare e quindi dare un’occhiata alla guida di stile JavaScript alla pagina MDC e JavaScript di MDC . Trovo anche meglio forzare la qualità del codice con uno strumento, ad es. Lint JavaScript o altre varianti.

Le migliori pratiche con OO suona più come se si desidera trovare modelli piuttosto che concentrarsi sulla qualità del codice, quindi guarda la ricerca di Google: modelli javascript e modelli jQuery .

  • Velocizza il tuo JavaScript

Potresti voler dare un’occhiata a Secrets of the JavaScript Ninja di John Resig (jQuery). “Questo libro ha lo scopo di prendere uno sviluppatore JavaScript intermedio e dargli la conoscenza di cui ha bisogno per creare una libreria JavaScript cross-browser, da zero.”

La bozza è disponibile attraverso l’editore: http://www.manning.com/resig/

Douglas Crockford ha anche alcuni bei articoli JavaScript sulla sua homepage: http://www.crockford.com/

Mi sento spesso l’unico ragazzo qui che usa MooTools per il mio javascript.

Significa M y O bject O riented Tools, mootools.

Mi piace molto la loro interpretazione di OOP in javascript. Puoi anche usare la loro implementazione di class insieme a jQuery, così non devi abbandonare jquery (anche se i mootools fanno altrettanto bene).

Ad ogni modo, dai al primo link una buona lettura e vedi cosa ne pensi, il secondo link riguarda i documenti mootools.

MooTools ed ereditarietà

Classi di MooTools

Ecco un libro che copre la maggior parte delle basi:

Javascript orientato agli oggetti per applicativi e librerie di alta qualità