ES6(7):リフレクト

機能のより多くの持つ代理操作対象を反映しています。

世界のほとんどは、プロキシによる方法または静的メソッドを反映しています。

オブジェクトの戻り値は、より合理的に比較して:一部変更するために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.setreceiverProxyobjReflect.setreceiverreceiverobjdefinePropertyReflect.setreceiverdefineProperty

 

 

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

 

おすすめ

転載: www.cnblogs.com/jony-it/p/10967729.html