// const obj={
// name:'xm',
// age:18
// }
// const proxy =new Proxy(obj,{
// get(target,property){
// return Reflect.get(target,property)
// }
// })//如果不定义get方法,默认执行的get就和上面的方法一样
// console.log(proxy.name);
const obj ={
name:'xm',
age:18
}
console.log('name' in obj);
console.log(delete obj['age']);
console.log(Object.keys(obj));//方法杂乱
console.log(Reflect.has(obj,'name'));
console.log(Reflect.deleteProperty(obj,'age'));
console.log(Reflect.ownKeys(obj));//统一提供一套用于操作对象的API
Reflect对象一共有以下13中方法:
1.Reflect.get(target, name, receiver)
//Reflect.get 方法查找并返回 target 对象的 name 属性,如果没有该属性,则返回 undefined。
2.Reflect.set(target, name, value, receiver)
//Reflect.set方法设置target对象的name属性等于value。
3.Reflect.has(target, name)
//Reflect.has方法对应name in obj里面的in运算符。
4.Reflect.deleteProperty(target, name)
//Reflect.deleteProperty方法等同于delete obj[name],用于删除对象的属性。
5.Reflect.construct(target, args)
//Reflect.construct方法等同于new target(…args),提供了一种不使用new关键字来调用构造函数的方法。
6.Reflect.getPrototypeOf(target)
//Reflect.getPrototypeOf方法用于读取对象的__proto__属性,对应Object.getPrototypeOf(obj)。
7.Reflect.setPrototypeOf(target, prototype)
//Reflect.setPrototypeOf方法用于给目标对象设置原型(prototype),对应Object.setPrototypeOf(obj, newProto)方法。它返回一个布尔值,表示是否设置成功。
8.Reflect.apply(target, thisArg, args)
//Reflect.apply方法等同于Function.prototype.apply.call(func, thisArg, args),用于绑定this对象后执行给定函数。
9.Reflect.defineProperty(target, name, desc)
//Reflect.defineProperty方法基本等同于Object.defineProperty,用来为对象定义属性。
10.Reflect.getOwnPropertyDescriptor(target, name)
//Reflect.getOwnPropertyDescriptor基本等同于Object.getOwnPropertyDescriptor,用于得到指定属性的描述对象,将来会替代掉Object.getOwnPropertyDescriptor。
11.Reflect.isExtensible(target)
//Reflect.isExtensible方法对应Object.isExtensible,返回一个布尔值,表示当前对象是否可扩展。
12.Reflect.preventExtensions(target)
//Reflect.preventExtensions对应Object.preventExtensions方法,用于让一个对象 变为不可扩展。它返回一个布尔值,表示是否操作成功。
13.Reflect.ownKeys(target)
//Reflect.ownKeys方法用于返回对象的所有属性,基本等同于Object.getOwnPropertyNames与Object.getOwnPropertySymbols之和。