Come faccio a progettare un oggetto Javascript per non utilizzare proprietà pubbliche?

3

Ho giocato con la creazione di oggetti delineata da Douglas Crockford nel suo nuovo discorso " Le parti migliori "

function constructor(spec){
    var that = otherConstructor(spec),
        member,
        method = function(){
           // spec, member, method all available without using this
        };

     that.method = method;
     return that
}

Nel codice su cui sto lavorando ho un valore membro che mi piacerebbe impostare nel mio oggetto e il mio primo istinto era quello di rendere pubblico quel membro e semplicemente di cambiare quel valore. Quando ho chiesto a Crockford il modo migliore per farlo (getter / setter vs that.property) ha risposto:

I covered that. You don't need public properties at all. Design at a higher level.

Quindi mi chiedo, quale sarebbe il design di livello superiore?

Se questa è una versione semplificata del mio oggetto

animator = function(){
    var that = {},
        playbackSpeed;

    return that;
}

e il mio obiettivo è quello di mutare playbackSpeed. La mia inclinazione è quella di aggiungere un metodo pubblico setPlaybackSpeed. È questo che intende?

    
posta Andrew Berg 23.04.2015 - 19:54
fonte

1 risposta

1

Quando crei un oggetto con la parola chiave new , hai accesso all'oggetto this che rappresenta la vista "pubblica" dell'oggetto. All'interno della portata della funzione è anche possibile creare variabili locali che sono quindi nella portata "privata". Quando assegni una funzione a un campo di this e implementa quella funzione nello stesso ambito, può accedere a qualsiasi delle tue variabili private. Ecco un esempio:

function Animator (specs) {

    // private variable
    var playbackSpeed = specs.playbackSpeed; 

    // public method
    this.setPlaybackSpeed = function(speed) {
         // can access playbackSpeed because it is in the surrounding scope
         playbackSpeed = speed;
    }

}

var animator = new Animator( { playbackSpeed: 3.0 } );
    
risposta data 24.04.2015 - 13:05
fonte

Leggi altre domande sui tag