ES 6のReflectは知っている必要がありますか?


Reflectとは
ES 6は、オブジェクトを操作するために提供される新しいAPIのために、将来の新しい方法はReflectオブジェクトのみに展開されます.
初探Reflect
ReflectとProxyは相補的であり、Proxyオブジェクトの方法であれば、Reflectオブジェクトに対応する方法を見つけられます.
const obj = { name: "song" };
const proxy = new Proxy(obj, {
  get(target, name) {
    // reflect            
    return Reflect.get(target, name);
  },
  set(target, name, value) {
    return Reflect.set(target, name, value);
  },
  has(target, name) {
    //   in      has  
    return Reflect.has(target, name);
  }
});
// reflect                 
console.log("name" in proxy);
console.log(Reflect.has(proxy, "name")); //        Reflect   
Reflect静的方法
Reflectオブジェクトは全部で13の静的な方法があります.私たちは順次古い書き方と新しい書き方を比較します.
1.Reflect.get
オブジェクト中の対応するkeyの値を取得します.
const my = {
    name:'song',
    age:18,
    get mny(){
        return this.a + this.b
    }
}
console.log(my['age']); //    
console.log(Reflect.get(my,'age'));
console.log(Reflect.get(my,'mny',{a:1,b:2})); //     this  
2.Reflect.set
オブジェクトのkeyに対応する値を設定します.
const my = {
  name: "song",
  age: 18,
  set mny(val) {
    this.value = val;
  }
};
let mny = { value: 0 };
my.mny = 100; //    
Reflect.set(my, "mny", 100);
Reflect.set(my, "mny", 100, mny); //        ,    this
console.log(mny); // {value:100}
3.Reflect.has
あるキーがこのオブジェクトに属するかどうかを判断する.
const my = {
    name:'song'
}
console.log('name' in my);
console.log(Reflect.has(my,'name'));
4.Reflect.defineProperty
オブジェクトの属性と値を定義すると、Object.definePropertyに相当します.
const person = {};
Object.defineProperty(person,'name',{
    configurable:false,
    value:'song'
});
console.log(person.name); //    ,      

Reflect.defineProperty(person,'name',{
    configurable:false,
    value:'song'
})
console.log(person.name);
5.Reflect.deleteProperty
オブジェクトの属性を削除します.
const person = {};
Reflect.defineProperty(person,'name',{
    configurable:false,
    value:'song'
});
// delete person.name;     
const flag = Reflect.deleteProperty(person,'name');
console.log(flag); //         
6.Reflect.co.nstruct
実用化クラスは、newに等しい.
class Person{
    constructor(sex){
        console.log(sex);
    }
}
new Person(' '); //    
Reflect.construct(Person,[' ']);
7.Reflect.get ProttypeOf
プロトを読み込むと、Object.get ProttypeOfに相当しますが、方法が伝達されるのが対象でないとエラーが発生します.
class Person {}
//    
console.log(Object.getPrototypeOf(Person) === Reflect.getPrototypeOf(Person));
8.Reflect.set ProttypeOf
設定プロトは、Object.set ProttotypeOfに相当しますが、設定が成功したかどうかを示すbootタイプに戻るかは異なります.
let person = {name:'song'};
let obj = {age:18};
// Object.setPrototypeOf(person,obj); //    
Reflect.setPrototypeOf(person,obj);
console.log(person.age);
9.Reflect.apply
きっとappy方法はみんなよく知っています.Reflect.appyはFunction.prototype.apple.callに相当します.
const func = function(a,b){
    console.log(this,a,b);
}
func.apply = () =>{
    console.log('apply')
}
// func.apply({name:'song'},[1,2]); //            
Function.prototype.apply.call(func,{name:'song'},[1,2]); //    
Reflect.apply(func,{name:'song'},[1,2]); //         !
10.Reflect.getOwn PropertyDescripter
Object.getOwn PropertyDescriptorに相当し、属性記述オブジェクトを取得する.
const obj = {name:1};
// const descriptor = Object.getOwnPropertyDescriptor(obj,'name'); //    
const descriptor = Reflect.getOwnPropertyDescriptor(obj,'name');
console.log(descriptor);
11.Reflect.prevent Extensions
オブジェクトを拡張することはできません.つまり、新しい属性を追加することはできません.Object.prevent Extensに相当します.
const person = {};
//    
Object.preventExtensions(person); //         
Reflect.preventExtensions(person);
person.a = 1;
console.log(person.a); // undefined
12 Reflect.isExtensioble
現在のオブジェクトが拡張可能かどうかを表します.
const person = {};
Reflect.preventExtensions(person);
Object.isExtensible(person) //     false
Reflect.isExtensible(person) // false
13.Reflect.ownKeys
オブジェクトのすべての属性を返します.Symbol属性を含みます.
const person = {
    age:18,
    [Symbol('name')]:'song'
};
console.log(Object.getOwnPropertyNames(person)); // [ 'age' ]    
console.log(Object.getOwnPropertySymbols(person)); // [ Symbol(name) ]    
console.log(Reflect.ownKeys(person)); // [ 'age', Symbol(name) ]
これで私達はReflectの使い方を全部説明しました.内容はもっと乾いています.実は核心は元からあるObjectの部分の方法をReflectの上に置いたので、難度は完全に見ていません!