JavaScript Getter e setter


Esempio

Getter e setter ti consentono di definire un comportamento personalizzato per leggere e scrivere una determinata proprietà sulla tua classe. Per l'utente, appaiono come qualsiasi proprietà tipica. Tuttavia, internamente una funzione personalizzata fornita dall'utente viene utilizzata per determinare il valore quando si accede alla proprietà (il getter) e per preformare eventuali modifiche necessarie quando viene assegnata la proprietà (il setter).

In una definizione di class , un getter è scritto come un metodo senza argomenti preceduto dalla parola chiave get . Un setter è simile, tranne che accetta un argomento (il nuovo valore viene assegnato) e viene invece utilizzata la parola chiave set .

Ecco una classe di esempio che fornisce un getter e setter per la sua proprietà .name . Ogni volta che viene assegnato, registreremo il nuovo nome in un array .names_ interno. Ogni volta che si accede, restituiremo l'ultimo nome.

class MyClass {
    constructor() {
        this.names_ = [];
    }

    set name(value) {
        this.names_.push(value);
    }

    get name() {
        return this.names_[this.names_.length - 1];
    }
}

const myClassInstance = new MyClass();
myClassInstance.name = 'Joe';
myClassInstance.name = 'Bob';

console.log(myClassInstance.name); // logs: "Bob"
console.log(myClassInstance.names_); // logs: ["Joe", "Bob"]

Se si definisce solo un setter, il tentativo di accesso alla proprietà verrà sempre restituito undefined .

const classInstance = new class {
    set prop(value) {
        console.log('setting', value);
    }
};

classInstance.prop = 10; // logs: "setting", 10

console.log(classInstance.prop); // logs: undefined

Se si definisce solo un getter, il tentativo di assegnare la proprietà non avrà alcun effetto.

const classInstance = new class {
    get prop() {
        return 5;
    }
};

classInstance.prop = 10;

console.log(classInstance.prop); // logs: 5