Es6-handler-apply

提供:Dev Guides
2020年6月23日 (火) 08:03時点におけるMaintenance script (トーク | 投稿記録)による版 (Imported from text file)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先:案内検索

ES6-handler.apply()

次の例では、幅と高さをパラメーターとして取り、長方形の面積を返す関数 rectangleArea を定義しています。 プログラムはプロキシを作成し、rectangleArea関数のハンドラーオブジェクトを定義します。 この*ハンドラーオブジェクト*は、関数が実行される前に関数に渡されるパラメーターの数を確認します。 2つのパラメーターが関数に渡されない場合、ハンドラーオブジェクトはエラーをスローします。

<script>
   function rectangleArea(width,height){
      return width*height;
   }
   const handler = {
      apply:function(target,thisArgs,argsList){
      console.log(argsList);
     //console.log(target)
      if(argsList.length == 2){
         return Reflect.apply(target,thisArgs,argsList)
      }
         else throw 'Invalid no of arguments to calculate'
      }
   }

   const proxy = new Proxy(rectangleArea,handler)
   const result = proxy(10,20);
   console.log('area is ',result)
   proxy(10)//Error
</script>

上記のコードの出力は以下のようになります-

[10, 20]
area is 200
[10]
Uncaught Invalid no of arguments to calculate