整理学習——ES 6のReflect

5908 ワード

記事の目次
  • 簡単な説明
  • Reflectオブジェクトの方法
  • Reflect.apply
  • 異常
  • Reflect.co nstruct
  • 異常
  • Reflect.defineProperty
  • 異常
  • Reflect.deleteProperty
  • 異常
  • Reflect.get
  • 異常
  • Reflect.getOwn PropertyDescripter(Obj,prop)
  • 異常
  • Reflect.get ProttypeOf
  • 異常
  • Reflect.has
  • 異常
  • Reflect.isExtenseble
  • 異常
  • Reflect.ownKeys
  • 異常
  • Refledct.preventExtensions()
  • 異常
  • Reflect.set
  • 異常
  • Reflect.set ProttypeOf
  • 異常
  • とObjectの方法の違いは
  • を統合します.
    簡単に説明する
    ReflectもES 6がオブジェクトを操作するために提供する新しいAPIである.ReflectはJavaScriptをブロックする操作を提供する内蔵オブジェクトであり、これらの方法はプロセッサオブジェクトの方法と同じである.関数オブジェクトではないので、作成できません.同時にReflectのすべての属性と方法は静的である.Reflectオブジェクトの設計目的はこれらがあります.
  • はObjectオブジェクトのいくつかを明らかに言語内部に属する方法をReflectオブジェクトに置く.
    現在,ある方法はObjectとReflectオブジェクトに同時に展開されており,将来の新しい方法はReflectオブジェクトに値を配置する.
  • により、いくつかのObject方法の戻り結果がより合理的になるように修正される.(例えば、Object.defineProperty(obj, name, desc)は、属性を定義できないときにエラーを投げ、Reflect.defineProperty(obj, name, desc)はfalseに戻る)
  • は、Object動作を関数挙動に変化させます.例えば、name in objdelete obj[name]と、ReflectにはReflect.has(obj, name)Reflect.deleteProperty(obj, name)とを使用します.
  • Reflectオブジェクトの方法はProxyオブジェクトの方法に対応しており、Proxyオブジェクトの方法であれば、Reflectオブジェクトに対応する方法を見つけることができる.Proxyオブジェクトをより便利に対応するReflectメソッドを呼び出すことができ、デフォルトの動作を完了します.
  • ObjectとReflectの違い:
    Object
    Reflect
    まちがった結果にあう
    エラーを申し込む
    falseを返します
    操作
    命令文
    関数の挙動
    Reflectオブジェクトの方法
    Reflectオブジェクトの方法はすべて静的方法である.Proxyオブジェクトのハンドルオブジェクトの関数と似ていますが、違いがあります.
    Reflect.apply(targt,thisAgment,argments List)
    起動パラメータとして、ボランティア関数を呼び出します.Funtion.prototype.applyと機能が似ています.target:ターゲット関数thisAgment:target関数が呼び出されたときに結合されたthisオブジェクトargments List:target関数が呼び出されたときに入ってきた参加リストで、このパラメータはクラスの配列のオブジェクトであるべきです.
    異常
    タレッジオブジェクトが起動できない場合は、TypeErrをスローします.
    Reflect.co nstruct(target,argments List[,newTarget])
    構造関数をnew操作することは、new target(...args)を実行することに相当する.target関数を構成関数として、argments Listを初期化パラメータとするオブジェクトの例を返します.target:実行されるターゲットコンストラクタargments List:クラス配列、ターゲットコンストラクタ呼び出し時のパラメータ.newTarget:オプションで、オブジェクトのプロトタイプオブジェクトを新規作成し、new.targtオペレータを参照して、デフォルト値はtargtです.
    異常
    targetまたはnew TargetがコンストラクタでないとTypeErrを投げます.
    Reflect.defineProperty(targt,propertyKey,atributes)
    基本的にはObject.defineProperty()と同等であり、唯一の違いはBoolean値を返すことである.属性が成功に定義されているかどうかを表します.target:ターゲットのpropertyKey:定義または変更する属性の名前.atributes:属性の定義または変更の説明.
    異常
    もしtargetがObjectではないなら、TypeErrを投げます.
    Reflect.deleteProperty(target,propertyKey)
    関数としてのdeleteオペレータは、delete target[name]を実行するのに相当する.Booleanを返します.削除に成功したかどうかを表します.ターゲットのpropertyKey:削除する属性の名前.
    異常
    もしtargetがObjectでないなら、TypeErrを投げます.
    Reflect.get(targt,propertyKey[,receiver])
    ターゲットにある属性の値を取得すると、target[name]に似ています.属性の値を返します.ない場合はundefinedを返します.target:対象のpropertyKey:取得したい値のキー名receiver:targetオブジェクトにgetterが指定されている場合、receiverはgetter呼び出し時のthis値となります.
    異常
    ターゲット値がObjectでない場合、Type Errをスローします.
    Reflect.getOwn PropertyDescripter(Obj,prop)
    Object.getOwn PropertyDescriptor()方法と似ています.与えられたオブジェクトの自身の属性の属性記述子を返します.プロトタイプチェーンの属性ではありません.対応する記述子オブジェクトを返します.そうでなければundefinedを返します.対象オブジェクトprop:ディスクリプタの属性名または対応するSymbolタイプを取得する.
    異常
    もしtargetがObjectタイプではないなら、Type Errorを投げます.
    Reflect.get ProttypeOf(taget)
    指定したオブジェクトの原型(内部の[Prottype])を返します.Object.get ProttypeOf()と同じです.与えられたオブジェクトのプロトタイプを返します.引き継ぎ属性がない場合は、null targetに戻ります.ターゲットオブジェクト
    異常
    targetがObjectタイプでない場合、TypeErrをスローします.
    Reflect.has(targt、propertyKey)
    オブジェクトに対応するキーがあるかどうかを判断します.この属性が存在するかどうかを示すBooleanを返します.ターゲットのpropertyKey:キー名
    異常
    targetがObjectタイプでない場合、TypeErrをスローします.
    Reflect.isExtenseble(target)
    オブジェクトが拡張可能かどうかを判断します.Object.isExtensioble()と似ていますが、最初のパラメータがオブジェクトでない場合はType Errを投げます.Object.isExtensioble()は最初のパラメータをオブジェクトに強制的に変換します.この関数は、Boolean値を返します.オブジェクトが拡張可能かどうかを表します.
    Reflect.isExtensible(1);
    //result: Uncaught TypeError: Reflect.isExtensible called on non-object
    Object.isExtensible(1);
    //result: false
    
    ターゲット
    異常
    targetがObjectタイプでない場合、TypeErrをスローします.
    Reflect.ownKeys(target)
    自身の属性キーを含むすべての属性キーを返します.継承属性は含まれていません.Object.keys()に似ていますが、enumerableの影響を受けません.target:目標オブジェクトの戻り値は、
    Object.getOwnPropertyNames(target)
    	.concat(
    		Object.getOwnPropertySymbols(target)
    	)
    
    異常
    targetがObjectタイプでない場合、TypeErrをスローします.
    Refledct.prevent Extensions()
    新しい属性がオブジェクトに追加されるのを阻止します.Object.prevent Extensions()と似ています.最初のパラメータがオブジェクトではない場合、この関数はType Errorを投げます.Object.prevent Extensions()はオブジェクトに強制的に変換します.
    Reflect.preventExtensions(1);
    //result: Uncaught TypeError: Reflect.preventExtensions called on non-object
    Object.preventExtensions(1);
    //result: false
    
    異常
    targetがObjectタイプでない場合、TypeErrをスローします.
    Reflect.set(targt,propertyKey,value[,receiver])
    値を属性の関数に割り当てます.Booleanを返します.更新の成功を表します.target:対象のpropertyKey:設定が必要な属性名value:設定された値receiver:オプション、setter関数のthis値
    異常
    targetがObjectタイプでない場合、TypeErrをスローします.
    Reflect.set ProttypeOf(targt、prototype)
    プロトタイプは新しいプロトタイプのオブジェクトを設定するか、nullとするか、Object.set ProttypeOf()と似ていますが、戻り値の違いがあります.Booleanを返します.設定が成功したかどうかを表します.target:対象のprototype:設定値、対象またはnull
    異常
    targetがオブジェクトでない場合、または設定された値がオブジェクトでもnullでもない場合、TypeErrorをスローします.
    Objectとの方法の違いを統合します.
    関数
    違い点
    Object
    Reflect
    isExtensioble()prevent Extensions()
    最初のパラメータはオブジェクトではありません.
    オブジェクトに強制変換
    Type Errorを投げる
    属性キーの取得
    enumerableを受けていますか
    Object.keys()は影響を受けます.
    Reflect.ownKeys()は影響を受けません.
    defineProperty()
    戻り値
    成功:オブジェクトに戻ることに失敗しました.すなわち、プロパティは成功に定義されていません.
    Booleanを返します.成功するかどうかを表します.
    参考資料:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Object/Reflecthttp://caibaojian.com/es6/proxy.html