Last active
April 14, 2025 10:58
-
-
Save Kcko/961d17fb8e69fc47da9c8f668a670ae1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// https://blog.logrocket.com/working-with-the-javascript-reflect-api/ | |
/* | |
Reflect.get() - získá hodnotu vlastnosti objektu | |
Reflect.set() - nastaví hodnotu vlastnosti objektu | |
Reflect.has() - kontroluje existenci vlastnosti (podobně jako operátor in) | |
Reflect.deleteProperty() - odstraní vlastnost objektu | |
Reflect.apply() - volá funkci s danými argumenty | |
Reflect.construct() - vytváří nové instance objektů (podobně jako operátor new) | |
Reflect.getPrototypeOf() - vrací prototyp objektu | |
Reflect.setPrototypeOf() - nastavuje prototyp objektu | |
Reflect.defineProperty() - definuje novou vlastnost nebo modifikuje existující | |
Reflect.getOwnPropertyDescriptor() - vrací deskriptor vlastnosti | |
Reflect.ownKeys() - vrací pole všech vlastních klíčů objektu | |
*/ | |
// Examples: | |
// Dynamická validace při nastavování vlastností: | |
// Místo obj[key] nebo obj.key, které mohou vyhodit chybu | |
const user = { name: "Jan" }; | |
// Vrátí undefined místo chyby, pokud vlastnost neexistuje | |
// Dynamická validace při nastavování vlastností: | |
const user = {}; | |
const result = Reflect.set(user, "age", 25); | |
console.log(result); // true - nastavení proběhlo úspěšně | |
// U zamrzlých objektů dostaneme false místo chyby | |
const target = { counter: 0 }; | |
const handler = { | |
get(target, prop, receiver) { | |
console.log(`Čtení vlastnosti ${prop}`); | |
return Reflect.get(target, prop, receiver); | |
}, | |
set(target, prop, value, receiver) { | |
console.log(`Nastavení vlastnosti ${prop} na ${value}`); | |
return Reflect.set(target, prop, value, receiver); | |
} | |
}; | |
const proxy = new Proxy(target, handler); | |
proxy.counter = 1; // Vypíše: Nastavení vlastnosti counter na 1 | |
console.log(proxy.counter); // Vypíše: Čtení vlastnosti counter, pak 1 | |
//Funkcionální volání metod: | |
function greet(name) { | |
return `Ahoj, ${name}! Jsem ${this.role}.`; | |
} | |
const context = { role: "programátor" }; | |
const result = Reflect.apply(greet, context, ["Petr"]); | |
console.log(result); // "Ahoj, Petr! Jsem programátor." | |
const frozenObj = Object.freeze({}); | |
const frozenResult = Reflect.set(frozenObj, "name", "Jan"); | |
console.log(frozenResult); // false (neúspěšné, ale žádná chyba) | |
const name = Reflect.get(user, "name"); // "Jan" | |
const age = Reflect.get(user, "age"); // undefined | |
// Dynamická konstrukce objektů: | |
// Místo Object.defineProperty(obj, prop, descriptor) | |
const success = Reflect.defineProperty(obj, "age", { | |
value: 30, | |
writable: false | |
}); | |
// Získání prototypu | |
const proto = Reflect.getPrototypeOf(obj); | |
// Zjištění, zda objekt má vlastnost (čistší než 'in' operátor) | |
if (Reflect.has(obj, "name")) { | |
// Objekt obsahuje vlastnost "name" | |
} | |
// Dynamická konstrukce objektů: | |
class User { | |
constructor(name, role) { | |
this.name = name; | |
this.role = role; | |
} | |
} | |
// Místo použití 'new User()' | |
const user = Reflect.construct(User, ["Jan", "admin"]); | |
console.log(user.name); // "Jan" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment