反映し、プロキシの出会いES6

リフレクト

明確に反映上に配置されたオブジェクトの内部からなるオブジェクト・オブジェクトに属するメソッドの多くを交換するオブジェクトメソッドを反映して、方法13

Reflect.apply(ターゲット、thisArg、引数)
Reflect.construct(ターゲット、引数)
Reflect.get(ターゲット名、受信機)
Reflect.set(ターゲット、名前、値、受信機)
Reflect.defineProperty(ターゲット名、DESC)
Reflect.deleteProperty(ターゲット名)
Reflect.has(ターゲット名)
Reflect.ownKeys(ターゲット)
Reflect.isExtensible(ターゲット)
Reflect.preventExtensions(ターゲット)
Reflect.getOwnPropertyDescriptor(ターゲット名)
Reflect.getPrototypeOf(ターゲット)が
反映します。 setPrototypeOf(ターゲット、試作品)

 全ての方法は、オブジェクトは、単純なデータ型であってはならないなどの1を持っているの最初のパラメータを反映して、真。 

Reflect.apply方法等同于Function.prototype.apply.call(func, thisArg, args),用于绑定this对象后执行给定函数.
Function.prototype.apply.call <===> Reflect.apply

Reflect.getPrototypeOfObject.getPrototypeOf的一个区别是,如果参数不是对象,Object.getPrototypeOf会将这个参数转为对象,然后再运行,而Reflect.getPrototypeOf会报错。

代理

プロキシエージェントは(ない単純なデータ型など1、真、「string」のプロキシ設定)このフィルタを用いて断面アクセスの一部の動作をオブジェクトができ、外部アクセスするように書き換えることができます。

プロキシ・コンストラクタは、2つのパラメータを渡し、最初のパラメータが傍受対象フィルタであり、第2のパラメータは、断面に接触するの振る舞いを指定するオブジェクトであります

constのOBJ = { 
  名: ''、年齢:'18' 、
  取得showName(){リターン`$ {this.name}年龄$ {this.age}`}   
} 

constのproxyOpr = { 
 取得:機能(ターゲット、キーを、受信機){ 
     にconsole.log( `キー$ {}を得ます)。
      Reflect.get(ターゲット、キー、受信機)を返します。
 }、
  設定:関数(ターゲット、キー、値、受信機){ 
    にconsole.log( `設定$ {キー}として'$ {値}' ')。
     Reflect.set(ターゲット、キー、値、受信機)を返します。
  } 
} 

CONSTプロキシ=新しいプロキシ(OBJ、proxyOpr)。
proxy.name = 'テストプロキシ'; 
console.log(proxy.showName)。

//「のテストプロキシ」として名を設定します

//取得showName
//取得名
//取得年齢
//テスト用のプロキシ年龄18

OBJと代入演算子の値は、傍受及び印刷するログを追加しています。

注意点:

そして1がそこに着くとき、私たちは、フィルタリング取りに行くだろうフィルタを適用します。

2つの生成されたプロキシオブジェクトは、これを実現します。

図3に示すように、プロキシProxy.revocableをキャンセルするために使用することができます

せて目標= {}; 
せハンドラ= {}; 

ましょう{プロキシ、取り消す} = Proxy.revocable(ターゲット、ハンドラ)。

proxy.foo = 123。
proxy.foo // 123 

REVOKE(); //代理取消
proxy.foo //TypeError: Revoked

 新しいプロキシ()データ型のオブジェクトが作成され、ターゲット・オブジェクトの値であり、すなわち、対象物が目的球であり、それはまた、プロキシ機能であります

CONST PROXY1 =新たなプロキシ(関数(i、j)は{I + jが返す;}、
{ 
  適用:機能(ターゲット、thisBinding、引数)を{ 
    にconsole.log(引数); 
    戻りReflect.apply(ターゲット、thisBinding、引数) ; //切记写リターン
  } 
})
CONST T = PROXY1(1、2)。
console.log(T)。
typeof演算PROXY1 
// [1,2] 
// 3 
// "機能"

 プロキシ・インスタンスが他のオブジェクトにプロトタイプとして使用することができます

VARプロキシ=新しいプロキシ({}、{ 
  得る:機能(ターゲット、プロパティ)は{ 
    35を返します; 
  } 
})。

VAR OBJ = {名: 'TT'}。
Reflect.setPrototypeOf(OBJ、プロキシ)

obj.name // TT 
obj.age // 35

  プロトタイプに係るチェーンは、傍受され、その結果、プロキシ・オブジェクトのプロパティを読み取るように、年齢自体はOBJ自体が性質を有している。、オブジェクトOBJ性ではない、リード傍受することはできません。

 

エージェントは、ターゲットオブジェクトが完了するまでに、プロキシに入れることができる外の世界と通信するために、自分自身の行動にのみ焦点を合わせる表示させることができます。たとえば、猫はネズミの実行と呼ばれます。実際には、猫はそれだけで彼らの通話を実現するために、マウスまたは他の動物があるかどうかを知ることはできません。最終的に誰が完了するまでに猫のエージェントに実行することができます。演技はニャーを傍受して、猫の食物連鎖は、行動を実行しているすべての動物に追加することができます。

反映し、プロキシのメソッドを傍受できることは一から一です。限り、Proxyオブジェクトのメソッド、あなたがでできるReflect対応する方法オブジェクトを検索します。

どこか私はやや似春とJSプロキシエージェントは、比較することを学ぶことができると思います。

 

おすすめ

転載: www.cnblogs.com/Gift/p/10826089.html