Penso che stia davvero cercando di mettere il pensiero orientato agli oggetti in JavaScript. Il tuo codice sembra proprio come questo esempio:
Creare un costruttore di classi JavaScript orientato agli oggetti da HTML Goodies.
La programmazione orientata agli oggetti è una tecnica organizzativa. Se hai una struttura dati utente, potrebbe avere campi come:
firstName
lastName
age
Potresti avere funzioni che funzionano con Utenti come,
createUser()
deleteUser()
changeFirstName()
addUserToCompany()
Potresti semplicemente lanciare tutte queste cose in giro per nulla, o potresti mettere tutti i dati e le funzioni relativi all'utente in un unico posto: una classe utente. Forse quell'ultima funzione addUserToCompany()
appartiene più alla classe Company che alla classe User. Non è un sistema perfetto. Ma non dovresti cercare quella funzione ovunque ma le classi User e Company, quindi almeno si restringe dove vorresti cercare le cose.
L'incapsulamento di solito significa (approssimativamente) "nascondersi". Nascondi le cose per limitare i modi in cui possono essere utilizzate. Se qualcosa non ha parti mobili, è meno probabile che si rompa. Quindi nascondi tutte le cose sensibili - si spera in modo più efficace di quanto vorresti aggiungendo un commento come // Don't touch this!
Sfortunatamente, tutto in JavaScript è globale, visibile e mutabile. L'unico modo per incapsulare le cose in JavaScript è metterle all'interno delle funzioni. Non ottieni la maggior parte delle garanzie / vantaggi di OOP in JavaScript. Ma alcune persone come OOP. Alcuni problemi sono meglio risolti con OOP, anche se l'uso di JavaScript in questo modo è un po 'artificiale.
Quello che vedi qui è qualcuno che crea dati e funzioni all'interno di una chiusura per rendere meno pubblici i dettagli di quelle cose. Non sono sicuro di quanto sia efficace, dal momento che gli oggetti JavaScript non forniscono quasi garanzie.
Molto probabilmente, il vantaggio in questo caso è che la persona che ha scritto il codice arriva a pensare sul codice nel modo in cui sono abituati a pensare in un linguaggio orientato agli oggetti come Java. Se ti piace pensare in questo modo, allora ti aiuta. In caso contrario, non vedo il vantaggio di provare a fare OOP anche in JavaScript.
Ma se la tua domanda riguarda specificamente l'incapsulamento, allora come ha detto Robert Harvey, è quasi sempre una buona cosa. E mettere le cose dentro le funzioni (o "chiusure") è l'unico modo per incapsulare in JavaScript (almeno fino a ES6).