Reflect-API-et
Videreformidle operasjoner med Reflect-metoder.
Reflect-API-et er en gratis leksjon i JavaScript Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i JavaScript Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i JavaScript Academy inneholder totalt 4 leksjoner.
Hva er Reflect?
Reflect er et innebygd objekt med metoder som utfører standardoperasjoner på lavt nivå for objekter: lesing, skriving, sletting og mer.
Metodene speiler proxy-fellene én til én, noe som gjør Reflect til den ideelle partneren når det skal skrives korrekte proxyer.
Reflect.get
Reflect.get(target, prop) leser en egenskap, på samme måte som target[prop], men som et ryddig funksjonskall.
const obj = { name: 'Ada', age: 36 };
console.log(Reflect.get(obj, 'name'));
console.log(Reflect.get(obj, 'age'));Reflect.set
Reflect.set(target, prop, value) skriver en egenskap og returnerer true eller false for å angi om operasjonen lyktes, akkurat slik en set-felle forventer.
const obj = {};
const ok = Reflect.set(obj, 'score', 42);
console.log(ok);
console.log(obj.score);Reflect.has og deleteProperty
Reflect.has speiler in-operatoren, og Reflect.deleteProperty speiler delete. Begge er funksjoner som returnerer boolske verdier.
const obj = { a: 1, b: 2 };
console.log(Reflect.has(obj, 'a'));
console.log(Reflect.deleteProperty(obj, 'b'));
console.log(Reflect.has(obj, 'b'));Reflect.ownKeys
Reflect.ownKeys returnerer alle egne egenskapsnøkler, inkludert symboler og ikke-enumererbare nøkler, og er mer omfattende enn Object.keys.
const obj = { a: 1, b: 2 };
Object.defineProperty(obj, 'hidden', { value: 3, enumerable: false });
console.log(Object.keys(obj));
console.log(Reflect.ownKeys(obj));Videresending i en Proxy
Den virkelige styrken ligger i å kalle den tilsvarende Reflect-metoden inne i en felle for å utføre standardoppførselen, og deretter legge den tilpassede logikken rundt den.
const proxy = new Proxy({ v: 1 }, {
get(target, prop, receiver) {
console.log('reading ' + prop);
return Reflect.get(target, prop, receiver);
}
});
console.log(proxy.v);Videresende set korrekt
Ved å bruke Reflect.set inne i en set-felle returneres den riktige boolske verdien automatisk, slik at det ikke er nødvendig å huske å returnere true selv.
const proxy = new Proxy({}, {
set(target, prop, value, receiver) {
console.log('writing ' + prop);
return Reflect.set(target, prop, value, receiver);
}
});
proxy.x = 10;
console.log(proxy.x);Hvorfor receiver er viktig
Ved å sende receiver til Reflect.get og Reflect.set sikres det at gettere og settere kjører med riktig this. Dette er viktig når objekter arver fra hverandre.
const base = { get label() { return 'id-' + this.id; } };
const proxy = new Proxy(base, {
get(target, prop, receiver) {
return Reflect.get(target, prop, receiver);
}
});
const child = Object.create(proxy);
child.id = 7;
console.log(child.label);Reflect.apply
Reflect.apply(fn, thisArg, argsArray) kaller en funksjon med en angitt this-verdi og en array med argumenter, og er et ryddigere alternativ til fn.apply.
function greet(greeting, name) {
return greeting + ', ' + name;
}
console.log(Reflect.apply(greet, null, ['Hello', 'Ada']));Reflect.construct
Reflect.construct(Cls, argsArray) oppretter en instans og tilsvarer new Cls(...args), men bruker en array med argumenter.
class Point {
constructor(x, y) { this.x = x; this.y = y; }
}
const p = Reflect.construct(Point, [3, 4]);
console.log(p.x, p.y);Hvorfor Reflect er viktig
Reflect gir funksjonsbaserte og forutsigbare versjoner av objektinternals og passer perfekt sammen med proxyer: hver felle videresender til den tilsvarende Reflect-metoden. Resultatet er korrekt og minimal proxy-kode. Deretter brukes alt dette på praktiske bruksområder.
const audited = new Proxy({ balance: 100 }, {
set(t, p, v, r) {
console.log(p + ': ' + t[p] + ' -> ' + v);
return Reflect.set(t, p, v, r);
}
});
audited.balance = 150;
console.log(audited.balance);Kort kontroll
Hvorfor kalle Reflect.get(target, prop, receiver) inne i en get-felle i stedet for target[prop]?
Oppsummering: Reflect-API-et
De har lært om motstykket til Proxy:
Reflecttilbyr funksjonsbaserte standardoperasjoner:get,set,has,deletePropertyogownKeys.- Metodene speiler proxy-fellene én til én.
- Videresending gjennom
Reflectmedreceiverivaretar arv korrekt. Reflect.applyogReflect.constructkaller funksjoner og oppretter instanser på en ryddig måte.
Lær deg JavaScript med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 59
- Leksjoner
- 200
Ofte stilte spørsmål
Er leksjonen «Reflect-API-et» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien JavaScript Academy, inkludert «Reflect-API-et», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i JavaScript Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Reflect-API-et»?
Videreformidle operasjoner med Reflect-metoder. Du øver på JavaScript Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med JavaScript Academy?
Ingen tidligere erfaring er nødvendig. JavaScript Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «Reflect-API-et»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne JavaScript Academy-leksjonen?
Ja. Alle JavaScript Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.