このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docsコミュニティーについてもっと知り、仲間になるにはこちらから。
handler.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年9月.
handler.apply() メソッドは、オブジェクトの[[Call]]内部メソッドに対するトラップです。関数呼び出しなどの操作で使用されます。
In this article
試してみましょう
function sum(a, b) { return a + b;}const handler = { apply(target, thisArg, argumentsList) { console.log(`Calculate sum: ${argumentsList}`); // 予想される結果: "Calculate sum: 1,2" return target(argumentsList[0], argumentsList[1]) * 10; },};const proxy = new Proxy(sum, handler);console.log(sum(1, 2));// 予想される結果: 3console.log(proxy(1, 2));// 予想される結果: 30構文
js
new Proxy(target, { apply(target, thisArg, argumentsList) { }})引数
次の引数がapply() メソッドに渡されます。this はハンドラーにバインドされます。
targetターゲットオブジェクト
thisArgこの呼び出しに対する
this引数argumentsListこの呼び出しに対する引数リスト
返値
apply() メソッドはどんな値でも返すことができます。
解説
>介入
このトラップは下記の操作に介入できます。
- 関数呼び出し:
proxy(...args) Function.prototype.apply()andFunction.prototype.call()Reflect.apply()
他にも、[[Call]]内部メソッドを呼び出すあらゆる操作に介入できます。
不変条件
以下の不変条件に違反している場合、トラップが呼び出されるとTypeError が発生します。
targetは呼び出し可能である必要があります。つまり関数オブジェクトでなければなりません。
例
>関数呼び出しのトラップ
次のコードでは、関数呼び出しをトラップします。
js
const p = new Proxy(function () {}, { apply(target, thisArg, argumentsList) { console.log(`called: ${argumentsList}`); return argumentsList[0] + argumentsList[1] + argumentsList[2]; },});console.log(p(1, 2, 3)); // "called: 1,2,3"// 6仕様書
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist> |