Reflect
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since ÑенÑÑбÑÑ 2016 г..
Reflect - ÑÑо вÑÑÑоеннÑй обÑекÑ, коÑоÑÑй пÑедоÑÑавлÑÐµÑ Ð¼ÐµÑÐ¾Ð´Ñ Ð´Ð»Ñ Ð¿ÐµÑеÑ
ваÑÑваемÑÑ
JavaScript опеÑаÑий. ÐÑи меÑÐ¾Ð´Ñ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸ÑÐ½Ñ Ð¼ÐµÑодам proxy handler. Reflect - ÑÑо не ÑÑнкÑионалÑнÑй, а пÑоÑÑой обÑекÑ, он не ÑвлÑеÑÑÑ ÑконÑÑÑÑиÑованнÑм.
ÐпиÑание
РоÑлиÑие Ð¾Ñ Ð±Ð¾Ð»ÑÑинÑÑва глобалÑнÑÑ
обÑекÑов, Reflect - ÑÑо не конÑÑÑÑкÑоÑ. ÐÑ Ð½Ðµ можеÑе иÑполÑзоваÑÑ ÐµÐ³Ð¾ Ñ Ð¾Ð¿ÐµÑаÑоÑом new или вÑзÑваÑÑ Reflect, как ÑÑнкÑиÑ. ÐÑе ÑвойÑÑва и меÑÐ¾Ð´Ñ Ð¾Ð±ÑекÑа Reflect ÑвлÑÑÑÑÑ ÑÑаÑиÑеÑкими (Ñак же, как и Ñ Ð¾Ð±ÑекÑа Math).
ÐеÑодÑ
ÐбÑÐµÐºÑ Reflect обеÑпеÑÐ¸Ð²Ð°ÐµÑ ÑабоÑÑ ÑÑаÑиÑеÑкиÑ
ÑÑнкÑий, назÑваÑÑиеÑÑ Ñак же, как меÑÐ¾Ð´Ñ proxy handler. ÐекоÑоÑÑе из ÑÑиÑ
меÑодов - Ñе же, ÑÑо и ÑооÑвеÑÑÑвÑÑÑие им меÑÐ¾Ð´Ñ ÐºÐ»Ð°ÑÑа Object.
Reflect.apply()-
ÐÑзÑÐ²Ð°ÐµÑ ÑелевÑÑ ÑÑнкÑÐ¸Ñ Ñ Ð°ÑгÑменÑами, пеÑеданнÑми в паÑамеÑÑе
args. СмоÑÑиÑе ÑакжеFunction.prototype.apply(). Reflect.construct()-
ÐпеÑаÑоÑ
newкак ÑÑнкÑиÑ. ÐналогиÑноnew target(...args). Также пÑедоÑÑавлÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¾Ð¿ÑеделиÑÑ Ð´ÑÑгой пÑоÑоÑип. Reflect.defineProperty()-
ÐÐ¾Ñ Ð¾Ð¶ на
Object.defineProperty(). ÐозвÑаÑаеÑBoolean. Reflect.deleteProperty()-
ÐпеÑаÑоÑ
deleteкак ÑÑнкÑиÑ. ÐналогиÑноdelete target[name]. Reflect.enumerate()-
ÐÐ¾Ñ Ð¾Ð¶ на Ñикл
for...in. ÐозвÑаÑÐ°ÐµÑ Ð¸ÑеÑаÑÐ¾Ñ Ñ ÑобÑÑвеннÑми пеÑеÑиÑлÑемÑми и наÑледÑемÑми ÑвойÑÑвами Ñелевого обÑекÑа. Reflect.get()-
ФÑнкÑиÑ, коÑоÑÐ°Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение ÑвойÑÑв.
Reflect.getOwnPropertyDescriptor()-
ÐналогиÑно
Object.getOwnPropertyDescriptor(). ÐозвÑаÑÐ°ÐµÑ Ð´ÐµÑкÑипÑÐ¾Ñ Ñказанного ÑвойÑÑва еÑли пÑиÑÑÑÑÑвÑÐµÑ Ð² обÑекÑе, инаÑеundefined. Reflect.getPrototypeOf()-
ÐналогиÑно
Object.getPrototypeOf(). Reflect.has()-
ÐпеÑаÑоÑ
inкак ÑÑнкÑиÑ. ÐозвÑаÑÐ°ÐµÑ Ð·Ð½Ð°ÑениеBooleanв завиÑимоÑÑи Ð¾Ñ ÑакÑа налиÑÐ¸Ñ ÑобÑÑвенного или наÑледованного ÑвойÑÑва. Reflect.isExtensible()-
ÐналогиÑно
Object.isExtensible(). Reflect.ownKeys()-
ÐозвÑаÑÐ°ÐµÑ Ð¼Ð°ÑÑив ÑÑÑок Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸ ÑобÑÑвеннÑÑ (не наÑледованнÑÑ ) ÑвойÑÑв.
Reflect.preventExtensions()-
ÐналогиÑно
Object.preventExtensions(). ÐозвÑаÑаеÑBoolean. Reflect.set()-
ФÑнкÑиÑ, пÑиÑваиваÑÑÐ°Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑвойÑÑвам. ÐозвÑаÑаеÑ
BooleanзнаÑениеtrueпÑи ÑÑпеÑном вÑполнении. Reflect.setPrototypeOf()-
ФÑнкÑиÑ, пÑиÑваиваÑÑÐ°Ñ Ð¿ÑоÑоÑип ÑÐµÐ»ÐµÐ²Ð¾Ð¼Ñ Ð¾Ð±ÑекÑÑ.
ÐÑимеÑÑ
>ÐÑовеÑка налиÑÐ¸Ñ ÐºÐ¾Ð½ÐºÑеÑнÑÑ ÑвойÑÑв Ñ Ð¾Ð±ÑекÑа
const duck = {
name: "Maurice",
color: "white",
greeting: function () {
console.log(`Quaaaack! My name is ${this.name}`);
},
};
Reflect.has(duck, "color");
// true
Reflect.has(duck, "haircut");
// false
ÐозвÑÐ°Ñ ÑобÑÑвеннÑÑ ÐºÐ»ÑÑей обÑекÑа
Reflect.ownKeys(duck);
// [ "name", "color", "greeting" ]
Ðобавление нового ÑвойÑÑва в обÑекÑ
Reflect.set(duck, "eyes", "black");
// веÑнÑÑÑÑ "true" еÑли вÑзов ÑÑпеÑен
// обÑÐµÐºÑ "duck" ÑепеÑÑ ÑодеÑÐ¶Ð¸Ñ ÑвойÑÑво "eyes" Ñо знаÑением "black"
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-reflect-object> |