Es6-handler-apply

提供:Dev Guides
移動先:案内検索

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