javascript - Accessors: setter fungerar inte
Jag leker med Javascript-accessor-egenskaper (jag börjar om från början för att studera javascript), och försöker skapa getter och setter för ett enkelt objekt, här är koden:
var dummy = {
name: 'empty',
description: 'static description',
get nameAccessor(){return 'name value is: ' + this.name;},
set nameAccessor(value){ this.name = value;},
get descAccessor(){return 'desccription value is: ' + this.description;},
};
console.log(dummy.nameAccessor);
console.log(dummy.nameAccessor('Mazinga'));
console.log(dummy.nameAccessor);
Men det ger ett fel:
Okänt TypeError: Egenskapen 'nameAccessor' hos objekt # är inte en funktion
när det kör setter-koden:
console.log(dummy.nameAccessor('Mazinga'));
Vad går fel här?
REDIGERA:
Ok, det verkar inte vara en välkänd funktion i JavaScript, men jag följde detta exempel från Javascript: Definitive Guide
var o = {
data_prop: value,
get accessor_prop() { /* function body here */ },
set accessor_prop(value) { /* function body here */ }
};
Svar #1
En accessor är inte en funktion som en egenskap hos objektet ("metod"), utan en funktion som kallas när den egenskapen tilldelas (set) eller hämtas (get). Använd
dummy.nameAccessor = 'Mazinga';
att anropa setter-funktionen.
Däremot får dummy.nameAccessor('Mazinga') egenskapen "nameAccessor" (vilket resulterar i namnet som en sträng) och försöker sedan anropa det som en funktion, vilket kommer att misslyckas. Det skulle fungera om din getter returnerade en funktion, men det är inte vad du vill här.
