Object.defineProperty vs get / set

0

Qual è la differenza e quando preferiresti utilizzare i metodi Object.defineProperty vs get / set in javascript per getter / setter?

Esempio:

class Foo {
    constructor () {
        Object.defineProperty(this, 'bar', {
            get () {
                return this._bar;
            },
            set (value) {
                this._bar = value;
                this.extraFunctionCall();
            }
        })
    }
}

vs

class Foo {
    get bar () {
        return this._bar;
    }

    set bar (value) {
        this._bar = value;
        this.extraFunctionCall();
    }
}
    
posta tam5 01.08.2017 - 21:47
fonte

3 risposte

3

Finiscono per essere gli stessi. La prima è semplicemente una patch per scimmia autoproclamata della seconda versione.

Non c'è davvero alcun motivo per fare il primo in questo modo se non quello di mettersi in mostra.

Questo non vuol dire che defineProperty() non abbia usi appropriati. Ma questo lo fa nel costruttore e con una stringa fissa. Il risultato netto è lo stesso comportamento e non più flessibilità che abbiamo nel secondo pur essendo meno leggibile.

Questo mi ricorda la riflessione di java. C'è molto potere pericoloso qui. Un sacco di corda con cui appendere. Non scherzare con questo senza una buona ragione.

    
risposta data 02.08.2017 - 05:53
fonte
2

defineProperty è utile quando si aggiungono getter / setter per un oggetto già esistente.

Tuttavia, quest'ultima opzione è migliore quando aggiungi getter / setter alla tua classe o quando crei il tuo oggetto.

    
risposta data 08.01.2018 - 00:50
fonte
0

L'unico vero caso d'uso per 'defineProperty' in un costruttore è, se vuoi usare le opzioni per 'enumerable' ecc.

    
risposta data 08.01.2018 - 08:06
fonte

Leggi altre domande sui tag