object自身的方法
 constructor: ƒ Object()
 hasOwnProperty: ƒ hasOwnProperty()
 isPrototypeOf: ƒ isPrototypeOf()
 propertyIsEnumerable: ƒ propertyIsEnumerable()
 toLocaleString: ƒ toLocaleString()
 toString: ƒ toString()
 valueOf: ƒ valueOf()
defineGetter: ƒ defineGetter()
defineSetter: ƒ defineSetter()
lookupGetter: ƒ lookupGetter()
lookupSetter: ƒ lookupSetter()
 get proto: ƒ proto()
 set proto: ƒ proto()
 新增reflect的方法
 apply: ƒ apply()
 construct: ƒ construct()
 defineProperty: ƒ defineProperty()
 deleteProperty: ƒ deleteProperty()
 get: ƒ ()
 getOwnPropertyDescriptor: ƒ getOwnPropertyDescriptor()
 getPrototypeOf: ƒ getPrototypeOf()
 has: ƒ has()
 isExtensible: ƒ isExtensible()
 ownKeys: ƒ ownKeys()
 preventExtensions: ƒ preventExtensions()
 set: ƒ ()
 setPrototypeOf: ƒ setPrototypeOf()
proto: Object虽然用reflect代替Object操作object类型,但是也是原型也是指向Object
 还有与reflect结合使用的proxy代理新属性
 let prp=new Proxy(函数或者对象,handle)
 handle也是核心内容
 是代理使用函数与对象的额外操作,也可以说是一种拦截
 
let handle={
 apply:function(){
 console.log(123)
 return Reflect.apply(…arguments)//函数拦截
 },
 has:function(tar,key){//判断属性
 return key in tar
 },
 set: function(obj, prop, value, receiver) {//设置属性
 obj[prop] = receiver;
 },
 get: function(target, key) {//获取属性
 console.log('getting '+key);
 return target[key]; // 不是target.key
 },
 construct: function (target, args, newTarget) {//构造函数 注意constructor这是获取代码然后实例化之后才是construct
 console.log(‘handle construct’)
 return Reflect.construct(target, args, newTarget)
 },
 defineProperty: function(target, propKey, propDesc){//修改或者创建属性,如果是属性创建,同时存在第四个函数就会转移this
 console.log(“handle defineProperty”);
 return false;
 },
 getOwnPropertyDescriptor: function(target, propKey){//获取对象自身属性
 return Object.getOwnPropertyDescriptor(target, propKey);
 },
 getPrototypeOf: function(target){//获取对象原型
 return exam;
 },
 isExtensible:function(target){
 return true;
 }
 }










