技術共有

es6 のプロキシはオブザーバー モードを実装します

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

プロキシの概要

ES6 のプロキシは、プロキシ オブジェクトの作成に使用される特別なオブジェクトです。これにより、オブジェクトのデフォルト アクションのインターセプトや変更などのカスタム動作を定義できます。 プロキシを使用すると、プロパティ アクセス、割り当て、関数呼び出しなど、オブジェクトに対するさまざまな操作をインターセプトできます。

プロキシの機能は、ターゲット オブジェクトの前にインターセプトのレイヤーを設定することです。これにより、ターゲット オブジェクトに対するさまざまな操作をインターセプトしてカスタマイズできます。 Proxyを利用することで、対象オブジェクトのアクセス制御、データ検証、属性ハイジャックなどの機能を実装できます。

プロキシは、ターゲット オブジェクトをプロキシ オブジェクトでラップし、プロキシ オブジェクト上で動作できる一連のフック関数 (「トラップ」とも呼ばれます) を提供します。プロキシ オブジェクトを操作するとき、実際にはこれらのフック関数を呼び出し、必要に応じて処理します。

プロキシ属性操作の概要

  • get(target, propKey,receiver): オブジェクトのプロパティの読み取りをインターセプトします
  • set(target, propKey, value, recruit): オブジェクトのプロパティの設定をインターセプトし、ブール値を返します。
  • has(target, propKey): プロキシ内の propKey の操作をインターセプトし、ブール値を返します。
  • deleteProperty(target, propKey): delete proxy[propKey] 操作をインターセプトし、ブール値を返します。
  • ownKeys(target): Object.getOwnPropertyNames(proxy)、Object.getOwnPropertySymbols(proxy)、Object.keys(proxy)、for...in ループをインターセプトし、配列を返します。このメソッドはターゲット オブジェクト自体のすべてのプロパティのプロパティ名を返しますが、Object.keys() の戻り結果にはターゲット オブジェクト自体の走査可能なプロパティのみが含まれます。
  • getOwnPropertyDescriptor(target, propKey): Object.getOwnPropertyDescriptor(proxy, propKey) をインターセプトし、プロパティの説明オブジェクトを返します。
  • defineProperty(target, propKey, propDesc): Object.defineProperty(proxy, propKey, propDesc)、Object.defineProperties(proxy, propDescs) をインターセプトし、ブール値を返します。
  • PreventExtensions(target): Object.preventExtensions(proxy) をインターセプトし、ブール値を返します。
  • getPrototypeOf(target): Object.getPrototypeOf(proxy) をインターセプトし、オブジェクトを返します。
  • isExtensible(target): Object.isExtensible(proxy) をインターセプトし、ブール値を返します。
  • setPrototypeOf(target, proto): Object.setPrototypeOf(proxy, proto) をインターセプトし、ブール値を返します。ターゲット オブジェクトが関数の場合、インターセプトできる操作がさらに 2 つあります。
  • apply(target, object, args): proxy(...args)、proxy.call(object, ...args)、proxy.apply(...) などの関数呼び出しとして Proxy インスタンスの操作をインターセプトします。
  • construct(target, args): new proxy(...args) などのコンストラクター呼び出しとして Proxy インスタンスの操作をインターセプトします。

使用Proxyオブザーバーパターンを実装する