ES 6においてProxyとReflectによるリロードを実現する方法

2092 ワード

この例は、ES 6におけるProxyとReflectによるオーバーロードを実現する方法を説明する.皆さんに参考にしてあげます.具体的には以下の通りです.
ProxyとReflectは、重負荷を実現します.
文法的にはJavaScriptは重載をサポートしていません.理由は簡単で、JSの関数は任意の種類、任意の数のパラメータに入ることができます.このようにして、同じ名前の関数のパラメータリストが異なる機能を実現できません.もちろん、実際の使用過程では、入力されたパラメータの個数およびタイプを人為的に検出し、異なる操作を行うことができる.しかし、これは重積載とは言えないと思います.
ES 6はProxyとReflectを持ってきています.併用することで重負荷が可能です.Proxyはいくつかの操作のデフォルト行為を修正するために用いられます.元の操作を「包装」することに相当します.Reflectオブジェクトの方法はProxyオブジェクトの方法と一対一に対応しており、Proxyオブジェクトが対応するReflectメソッドを簡単に呼び出すことができ、デフォルト動作を完了させる.私たちはこのようにそれらを使うことができます.

function LogMessage( m ){
  this.m = m;
}
var message = new LogMessage( 1 );
var overload = new Proxy(message , {
  get: function(target, key, receiver){
    console.log(`getting ${key}`);
    return Reflect.get(target , key , receiver);
  },
  set: function(target, key, value, receiver){
    console.log(`setting ${key}`);
    return Reflect.set(target, key, value, receiver);
  }
});
overload.m = 2; //setting m
var s = overload.m; //getting m
見ましたか?面白くないですか?新しく作成したProxyオブジェクトoverloadはターゲットのmessageの操作を完了できます.また、デフォルト操作の前に他の操作をカスタマイズできます.これはJavaの重さに似ていると思います.
ProxyとReflectはどのような実例的な方法がありますか?
1.get()
は、ある属性の読み取り動作をブロックするために使用される.
2.set()は、ある属性の割当動作をブロックするために使用される.
3.has()は、いくつかの属性を隠してもよく、inオペレータによって巡回されない.
4.construct()は、newコマンドをブロックするために使用されます.
5.deleteProperty()は、delete動作をブロックするために使用される.
6.defineProperty()はObject.defineProperty操作をブロックするために使用されます.
7.enumerate()は、for...inサイクルをブロックするために使用されます.
8.getOwnPropertyDescriptor()はObject.getOwn PropertyDescriptorの操作をブロックするために使用されます.
9.isExtensible()はObject.isExtensioble動作をブロックするために使用されます.
10.preventExtensions()はObject.prevent Extensions動作をブロックするために使用されます.
11.setPrototypeOf()はObject.set ProttypeOf動作をブロックするために使用されます.
上記の多くの方法はあまり使われていません.興味があれば、関連資料を調べに行ってもいいです.
本論文で述べたように、皆さんのECMAScriptプログラムの設計に役に立ちます.