機能のより多くの持つ代理操作対象を反映しています。
世界のほとんどは、プロキシによる方法または静的メソッドを反映しています。
オブジェクトの戻り値は、より合理的に比較して:一部変更するためにObject
、メソッドが結果を返すことがより合理的になってみましょう。たとえば、Object.defineProperty(obj, name, desc)
プロパティが定義できないとき、それはエラーがスローされます、とReflect.defineProperty(obj, name, desc)
なります戻りますfalse
。
場合 Proxy
オブジェクトと Reflect
オブジェクトが割り当て完了のデフォルトの振る舞いである前者切片割り当て、に関連して使用され、そしてするために導入しreceiver
、その後Reflect.set
トリガProxy.defineProperty
傍受します。
せP = { : 'A' }。 せハンドラ= { セット(ターゲット、キー、値、受信機){ にconsole.log( 'セット')。 Reflect.set(ターゲット、キー、値、受信機) }、 のDefineProperty(ターゲット、キー、属性){ にconsole.log( 'のDefineProperty')。 Reflect.defineProperty(ターゲット、キー、属性); } }。 聞かせてOBJ =新しいプロキシ(P、ハンドラ); obj.a = 'A'; //設定 //のDefineProperty
そのため、引数は常にを指している現在の インスタンス(すなわち例)、および渡された後、それがプロパティに割り当てられます(すなわち上記)、トリガするために主要な傍受を。場合は渡されていない、それがトリガされません傍受を。Proxy.set
receiver
Proxy
obj
Reflect.set
receiver
receiver
obj
defineProperty
Reflect.set
receiver
defineProperty
Reflect.construct:新しいターゲット(引数)に相当するオブジェクトのインスタンスを作成します。
グリーティング関数(名前){ this.name =名; } //新しい新しい文言 CONSTインスタンス=新しいグリーティング( 'ジョン・ドウ'); // Reflect.construct文言 CONSTインスタンス= Reflect.construct(挨拶、[ ' ジョー・スミス「])。
場合Reflect.construct()
の第一の方法引数は関数ではありません、それはエラーになります。
Reflect.getPrototypeOf:
オブジェクトを読み取るための__proto__
対応属性Object.getPrototypeOf(obj)
。
新しい新しいFancyThingこのmyobj =一定(); //古い言い回し Object.getPrototypeOf(このmyobj)=== FancyThing.prototype; //新しい文言 Reflect.getPrototypeOf(このmyobj)=== FancyThing.prototype。
Reflect.getPrototypeOf
そして、Object.getPrototypeOf
違いがあればということであるパラメータがオブジェクトではありません、Object.getPrototypeOf
このオブジェクトへのパラメータ、およびを実行する、とReflect.getPrototypeOf
文句を言うでしょう。
Reflect.apply():あなたがしたい場合は機能的に結合this
オブジェクトを書き込むことができfn.apply(obj, args)
ますが、機能は独自の定義されている場合apply
の方法を、それが唯一書き込むことができますFunction.prototype.apply.call(fn, obj, args)
使用するReflect
オブジェクトは、この操作を簡略化することができます。
Reflect.defineProperty:するオブジェクトのプロパティを定義します。
CONST P =新しいプロキシ({}、{ のDefineProperty(ターゲット、プロペラ、記述子){ にconsole.log(記述子); Reflect.defineProperty(ターゲット、小道具、記述子)を返します; } })。 p.fooは= 'バー'; // {値: "バー"、書き込み可能:真、列挙:真、設定:真} p.foo // "バー"
Proxy.defineProperty
傍受するために設定されたプロパティの割り当ては、その後、Reflect.defineProperty
割り当てを完了しました。
Reflect.preventExtensions:オブジェクトが使用できなくなった拡張子にします。これは、操作の成功かどうかを示すブール値を返します。
Observerパターン:すなわち達成するために、達成するためにプロキシ・ライト・オブザーバ・モード最も簡単に使用observable
し、observe
この2つの機能。考えているobservable
機能は、様々な機能がオブザーバーとして作用トリガ、割り当てを傍受、プロキシプロキシの元のオブジェクトを返します。
constのqueuedObservers =新しいセット(); CONST = FN => queuedObservers.add(FN)を観察。 CONST観察= OBJ =>新しいプロキシ(OBJ、{セット})。 機能セット(ターゲット、キー、値、受信機){ CONST結果= Reflect.set(ターゲット、キー、値、受信機) queuedObservers.forEach(観察=>観察者()); 結果を返します。 }
まず:観測定義プロキシを定義する必要があり(プロキシオブジェクトを追加する必要がある)、実行セット(追加するオブジェクトを設定する例を追加)操作、プロキシオブジェクトは、ターゲットオブジェクト(元のオブジェクト)の最初のセットのプロパティと値であり、その後リサイクルobserver関数の実行(印刷方法の一例)。
観測可能な人=一定({ 名: 'ジョン・ドウ'、 年齢:20 }); 機能印刷(){ はconsole.log(PERSON.NAME} {$ `、` $ {person.age}) } (印刷)を観察。 person.name = 'ジョン・ドウ'; //出力 //ジョン・ドウ、20