Reflect.apply()
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.apply() вÑзÑÐ²Ð°ÐµÑ Ð¿ÐµÑеданнÑÑ ÐµÐ¼Ñ ÑÑнкÑÐ¸Ñ Ñ ÑказаннÑми аÑгÑменÑами.
ÐнÑеÑакÑивнÑй пÑимеÑ
console.log(Reflect.apply(Math.floor, undefined, [1.75]));
// Expected output: 1
console.log(
Reflect.apply(String.fromCharCode, undefined, [104, 101, 108, 108, 111]),
);
// Expected output: "hello"
console.log(
Reflect.apply(RegExp.prototype.exec, /ab/, ["confabulation"]).index,
);
// Expected output: 4
console.log(Reflect.apply("".charAt, "ponies", [3]));
// Expected output: "i"
СинÑакÑиÑ
Reflect.apply(target, thisArgument, argumentsList)
ÐаÑамеÑÑÑ
- target
-
ФÑнкÑиÑ, коÑоÑÑÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ вÑзваÑÑ.
- thisArgument
-
ÐнаÑение пеÑеменной
thisво вÑÐµÐ¼Ñ Ð²Ñзова ÑÑнкÑииtarget. - argumentsList
-
ÐбÑекÑ, подобнÑй маÑÑивÑ, ÑодеÑжаÑий аÑгÑменÑÑ, Ñ ÐºÐ¾ÑоÑÑми должна бÑÑÑ Ð²Ñзвана ÑÑнкÑиÑ
target.
ÐозвÑаÑаемое знаÑение
ÐозвÑаÑаеÑÑÑ Ð·Ð½Ð°Ñение, коÑоÑое веÑнÑÑ ÑÑнкÑÐ¸Ñ target Ñ ÑказаннÑм знаÑением пеÑеменной this и аÑгÑменÑами.
ÐÑклÑÑениÑ
TypeError, еÑли ÑÑнкÑÐ¸Ñ target не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñзвана.
ÐпиÑание
Ð ES5, обÑÑно иÑполÑзÑеÑÑÑ Ð¼ÐµÑод Function.prototype.apply(), ÑÑÐ¾Ð±Ñ Ð²ÑзваÑÑ ÑÑнкÑÐ¸Ñ Ñ ÑказаннÑм знаÑением пеÑеменной this и arguments, пеÑеданнÑми как маÑÑив (или маÑÑивоподобнÑй обÑекÑ).
Function.prototype.apply.call(Math.floor, undefined, [1.75]);
С иÑполÑзованием Reflect.apply ÑÑо дейÑÑвие ÑÑановиÑÑÑ Ð±Ð¾Ð»ÐµÐµ понÑÑнÑм и Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð¼ÐµÐ½ÑÑе меÑÑа в коде.
ÐÑимеÑÑ
>ÐÑполÑзование Reflect.apply()
Reflect.apply(Math.floor, undefined, [1.75]);
// 1;
Reflect.apply(String.fromCharCode, undefined, [104, 101, 108, 108, 111]);
// "hello"
Reflect.apply(RegExp.prototype.exec, /вÑ/, [
"пÑевÑÑокомногоÑаÑÑмоÑÑиÑелÑÑÑвÑÑÑий",
]).index;
// 4
Reflect.apply("".charAt, "пони", [3]);
// "и"
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-reflect.apply> |