v'è infatti un modo per avere variabili private in oggetti Ember, come segue:
MyObject = Ember.Object.extend({
init: function() {
// private variable
var a = 1;
// methods to get, set, or otherwise accesss the private variables
this.getA = function() {return a;};
this.setA = function(val) {a = val;}
// don't forget this!
this._super(...arguments);
}
});
Ora provate
o1 = MyObject.create()
o2 = MyObject.create()
o1.setA(42);
o2.getA(); //1
In altre parole, è necessario dichiarare le variabili private, e qualsiasi getter, setter o altre routine che vogliono usarli, nel gancio init
. Ovviamente, ciò significa che quei getter/setter saranno presenti su ogni istanza della classe, piuttosto che nel suo prototipo. Questo è leggermente inefficiente, ma lo stesso vale per qualsiasi approccio alle variabili private per le classi in JavaScript.
È possibile che Ember possa introdurre un nuovo hash private: {}
sugli oggetti, ma in tal caso Ember avrebbe bisogno di molti macchinari per gestire la ricerca e il controllo dell'accesso alle variabili private attraverso le gerarchie di classi. Sarebbe equivalente a ridisegnare o estendere la lingua stessa, che non fa parte della missione Ember.
Nel frattempo, l'approccio sopra riportato funziona correttamente se il numero di variabili di istanza private è limitato e il numero di routine che devono accedervi è ridotto. Quindi la risposta accettata che dice che questo è impossibile è, beh, sbagliato.
fonte
2014-04-12 03:47:51
capito, grazie! interessante, gli autori di ember sono interessati ad impegnarsi con questo tipo di funzionalità. –
Per i visitatori che arrivano qui dopo cinque anni, si prega di essere consapevoli che questa risposta (accettata) è sbagliata. –