← 返回首页
handler.apply() - JavaScript | MDN

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

View in English Always switch to English

handler.apply()

Baseline 広く利用可能

この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2016年9月以降、すべてのブラウザーで利用可能です。

handler.apply() メソッドは、オブジェクトの [[Call]] 内部メソッドに対するトラップです。関数呼び出しなどの操作で使用されます。

目次

試してみましょう

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)); // 予想される結果: 3 console.log(proxy(1, 2)); // 予想される結果: 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

仕様書

仕様書
ECMAScript® 2027 Language Specification
# sec-proxy-object-internal-methods-and-internal-slots-call-thisargument-argumentslist

ブラウザーの互換性

ブラウザー互換性一覧表を表示するには、JavaScript を有効にしてください。

関連情報