Vai con una prospettiva orientata agli oggetti [duplicato]

1

La mia domanda JavaScript OOP è in fondo se vuoi saltare la mia introduzione.

In una risposta a la domanda Accesso alle variabili da altre funzioni senza utilizzare le variabili globali , c'è un commento su OOP che dice:

If there's a chance that you will reuse this code, then I would probably make the effort to go with an object-oriented perspective. Using the global namespace can be dangerous -- you run the risk of hard to find bugs due to variable names that get reused. Typically I start by using an object-oriented approach for anything more than a simple callback so that I don't have to do the re-write thing. Any time that you have a group of related functions in javascript, I think, it's a candidate for an object-oriented approach.

Mi suona sincera per quello che ho visto alcuni dei miei vecchi colleghi OOP. Ci sono molti approcci diversi e diverse voci che portano in direzioni diverse. Dato che sono uno sviluppatore front-end e un designer dell'interfaccia utente, sono un po 'confuso.

Sviluppa la domanda Ho sentito da una varietà di luoghi che le variabili globali sono intrinsecamente cattive e cattive, quando si fa un Javascript non orientato agli oggetti, e che ci sono tre scelte disponibili per rendere una variabile da una funzione, visibile e utilizzabile da un'altra funzione, ad esempio , la funzione A per essere visibile alla funzione B; oppure, una variabile della Funzione A da passare e utilizzabile nella funzione B.

  1. renderlo globale
  2. trasformalo in proprietà dell'oggetto o
  3. passalo come parametro quando chiami B da A.

Ho letto di spazi dei nomi, curriculum e altri approcci ...

Domanda: Detto ciò, mi chiedevo quale sia la migliore struttura OOP o la migliore pratica di codice in JavaScript che mantenga le cose incapsulate e offra maggiore sicurezza dall'avere esposto le vostre variabili alla manipolazione?

    
posta Community 22.06.2013 - 22:04
fonte

2 risposte

3

Dai un'occhiata all'articolo di Douglas Crockford su membri privati in JavaScript . Per nascondere le variabili, la tua unica vera opzione è quella di creare una chiusura in cui sono ambiti. Ad esempio, in un browser:

;(function() {

    // secret is only visible to definitions inside this function
    var secret = "secret";

    // secretWrapper's functions "close over" secret so they retain
    // access even after this enclosing function executes.
    window.secretWrapper = {
        getSecret: function() {
            return secret;
        },
        setSecret: function(val) {
            secret = val;
        }
    };        

})();

Evitare l'inquinamento dello spazio dei nomi globale è un obiettivo nobile, ma alla fine il codice deve essere collegato a qualcosa, l'oggetto globale ( window nel browser) o un oggetto DOM (che è collegato all'oggetto globale).

Ricorda che questo non rende il tuo codice più sicuro o privo di manipolazioni. Nel browser, chiunque può sovrascrivere le implementazioni ogni volta che ne hanno voglia. Può tuttavia rendere il tuo codice più gestibile. Permette di rompere un problema in pezzi che devono essere solo consapevoli delle loro responsabilità minori.

    
risposta data 23.06.2013 - 19:02
fonte
0

Puoi fare così tanto con JavaScript

Indipendentemente dal framework utilizzato, JavaScript non ha semplicemente un metodo per contrassegnare le proprietà di un oggetto definito dall'utente come protetto o nascosto. Se una funzione può ottenere un riferimento al tuo oggetto, quella funzione può cambiare qualsiasi parte di quell'oggetto.

Fai del tuo meglio con quello che hai.

Se vuoi proteggere dalla manipolazione cross-function, passa gli oggetti leggeri come parametri o spoolne uno prima di rilasciare il tuo lock esclusivo.

Se vuoi che qualcosa in JS sia sicuro, mettilo sull'altro lato della chiamata HTTP. (E se stai creando un'app solo lato client, metti il tuo codice protetto al di fuori dell'oggetto javascript.)

Se vuoi proteggere da un uso eccessivo accidentale (motivo per cui i globali sono malvagi), scegli un quadro o scrivi il tuo e seguilo religiosamente.

Alcuni consigli su come farlo

  1. Scrivi qualsiasi cosa non banale come un oggetto. Cioè, se si tratta di più di due righe di codice, dovrebbe essere un metodo di alcuni oggetti personalizzati nello spazio dei nomi globale (o un suo figlio).
  2. I gestori di eventi non banali dovrebbero chiamare metodi di oggetti invece di eseguire autonomamente il lavoro. (Più di due affermazioni è probabile "non banale".)
  3. I metodi dovrebbero SOLO influenzare le proprietà dei propri oggetti e i loro parametri.
  4. Se possibile, evita che i metodi di un oggetto facciano più che richiamare gli altri metodi di quell'oggetto, i metodi del genitore dell'oggetto o i metodi figli di quell'oggetto.
  5. Seriamente, scegli un quadro. jQuery è solo una risposta, e per OOP non è così sgargiante come prototype o enyo
  6. Il vero vantaggio di OOP per JS non è l'incapsulamento. È testabilità. Quando scegli un framework, inclinati verso uno che include una buona bardatura di test per il tuo nuovo codice. (Oppure, diamine, scrivine uno anche tu. Non sono così difficili.)
risposta data 23.06.2013 - 18:33
fonte

Leggi altre domande sui tag