このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

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]] 内部メソッドに対するトラップです。関数呼び出しなどの操作で使用されます。

試してみましょう

function sum(a, b) {
  return a + b;
}

const handler = {
  apply: function (target, thisArg, argumentsList) {
    console.log(`Calculate sum: ${argumentsList}`);
    // Expected output: "Calculate sum: 1,2"

    return target(argumentsList[0], argumentsList[1]) * 10;
  },
};

const proxy1 = new Proxy(sum, handler);

console.log(sum(1, 2));
// Expected output: 3
console.log(proxy1(1, 2));
// Expected output: 30

構文

js
new Proxy(target, {
  apply(target, thisArg, argumentsList) {
  }
});

引数

次の引数が apply() メソッドに渡されます。 this はハンドラーにバインドされます。

target

ターゲットオブジェクト

thisArg

この呼び出しに対する this 引数

argumentsList

この呼び出しに対する引数リスト

返値

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

ブラウザーの互換性

関連情報