proxy,reflect,set,map

147 阅读1分钟
1.proxy用来修改某些操作的默认行为。
var obj=new Proxy({},{
get:function(target,propKey,receiver){
console.log(`getting ${propKey}`)},
set:function(target,propKey,receiver){
console.log(`setting ${propKey}`)})
obj.count=1  // "setting count"
2.var proxy = new Proxy(target, handler);
get(target, propKey, receiver):拦截对象属性的读取,
set(target, propKey, value, receiver):拦截对象属性的设置
apply(target, object, args):拦截 Proxy 实例作为函数调用的操作,
2.reflect对象的目的。1.修改某些object的返回结果,让结果更合理。 2.将某些方法放在reflect对象上。
比如Object.defineProperty(obj,name,desc)
reflect.get可以查找并返回target的name属性。
例子:
var obj={ foo:1,bar:3};
console.log(11,Reflect.get(obj,'foo'))  //1
Reflect.set(target, name, value, receiver)
Reflect.set方法设置target对象的name属性等于value 同上

set map
1.set去重.[...new Set(arr)]  var s=new Set()
arr.forEach(x=>s.add(x))
Array.from 可以将set结构转为数组。
遍历:keys(),values(),entries()
set 也可以使用foreach. set.forEach((value, key) => console.log(key + ' : ' + value))
set实现交集,并集。
并集 var a=[1,2,3,4]var b=[3,5,6]
var c=new Set([...a,...b]); console.log(...c) 
交集 var c=new Set([...a].filter(x=>b.has(x)))
差集 var c=new Set([...a].filter(x=>!b.has(x)))

weakset同set是不重复值的集合,但是里面只能是对象。
const a = [[1, 2], [3, 4]];const ws = new WeakSet(a);
// WeakSet {[1, 2], [3, 4]}