当前位置:网站首页>proxy代理服务_2
proxy代理服务_2
2022-08-10 23:22:00 【勇敢*牛牛】
deleteProperty
删除属性 delete
关键词
var o={
a:1,b:2,c:3};
Object.defineProperties(o,{
d:{
configurable:true,
value:3
}
})
var p=new Proxy(o,{
deleteProperty(target,key){
var disc=Object.getOwnPropertyDescriptor(target,key);
if(!disc.enumerable){
return false;
}
return delete target[key];
// return Reflect.deleteProperty(target,key)
}
})
delete p.a;
delete p.d;
var o={
a:1,b:2,length:3};
var p=new Proxy(o,{
deleteProperty(target,key){
if(key==="length"){
return false;
}
return Reflect.deleteProperty(...arguments);
}
})
delete p.a;
delete p.length;
console.log(o)
这个代理不能删除添加和修改数据内容
var o={
a:1,b:2};
var p=new Proxy(o,{
set(target,key,value){
return false;
},
defineProperty(target,key,disc){
return false;
},
deleteProperty(target,key){
return false;
}
})
p.c=10;
p.d=1;
delete p.a;
console.log(o)
getOwnPropertyDescriptor
获取描述对象代理
var o={
a:1,b:2};
Object.defineProperty(o,"c",{
value:3
})
var p=new Proxy(o,{
getOwnPropertyDescriptor(target,key){
var targetDisc=Reflect.getOwnPropertyDescriptor(...arguments);
var disc={
configurable:true,
writable:targetDisc.writable,
enumerable:targetDisc.enumerable,
value:10
}
return targetDisc;
}
})
var disc=Object.getOwnPropertyDescriptor(p,"c");
console.log(disc)
setPrototypeOf getPrototypeOf
设置和获取原型链代理对象
var p=new Proxy(o1,{
setPrototypeOf(target,proto){
console.log("aa")
proto.c=0;
return Reflect.setPrototypeOf(target,proto);
},
getPrototypeOf(target){
console.log("bb")
return Reflect.getPrototypeOf(target);
}
})
Object.setPrototypeOf(p,o);
console.log(o1);
var o2={
e:10};
Object.setPrototypeOf(p,o2);
console.log(o1);
console.log(Object.getPrototypeOf(p));
console.log(p.__proto__)
p.__proto__={
e:10}
has
返回自身的对象属性代理
var o={
a:1,b:2,c:3};
var o1={
d:10,e:20};
Object.setPrototypeOf(o,o1);
var p=new Proxy(o,{
has(target,key){
// return Reflect.has(target,key)
// return key in target;//会把所有对象属性和原型属性可枚举的都返回
console.log("aa")
return Object.hasOwn(target,key);//只返回自身的对象属性
}
})
console.log(Object.hasOwn(p,"a"));
调用代理的has使用in
console.log("a" in p);
console.log("d" in p)
for(var key in o){
console.log(key)
}
for(var key in p){
console.log(key)
}
preventExtensions isExtensible
可扩展代理
var o={
a:1,b:2};
var p=new Proxy(o,{
preventExtensions(target){
if(target.a){
target.c=10;
}
// return Object.preventExtensions(target);
return Reflect.preventExtensions(target);
},
isExtensible(target){
console.log("bb");
Object.preventExtensions(target);
return Reflect.isExtensible(target);
}
})
Object.preventExtensions(p);
o.d=10;
console.log(o)
console.log(Object.isExtensible(p));
ownKeys
获取keys
var o={
a:1,b:2,c:3,_d:4};
var p=new Proxy(o,{
ownKeys(target){
console.log("aaa");
var arr=Reflect.ownKeys(target);
return arr.filter(item=>!/^_/.test(item));
}
})
在使用Object.getOwnPropertyNames和Object.getOwnPropertySymbols都会触发ownKeys
Reflect.ownKeys(p) 也会调用owenKeys
var names=Object.getOwnPropertyNames(p);
var names1=Object.getOwnPropertySymbols(p);
var names =Reflect.ownKeys(p)
console.log(names)
apply
设置this指向
function fn(a,b){
console.log(this);
}
var o={
a:1}
var p=new Proxy(fn,{
// target 是fn
// thisArg 是fn函数中this的指向
// argArr 就是fn函数执行带入的实参
apply(target,thisArg,argArr){
// console.log("aa",thisArg,argArr)
if(argArr.length===0) argArr=[1,2];
if(thisArg===undefined) thisArg=o;
return target.apply(thisArg,argArr);
}
});
p(1,2);
p.apply({
a:1},[1,2]);
p.call({
a:1},1,2);
p.bind({
a:1})(1,2);
p();
边栏推荐
猜你喜欢
随机推荐
Btree index and Hash index
数学建模准备知识
矩阵的迹(详解)
VMware 虚拟机开启Ip地址自动更换解决
二叉树 | 迭代遍历 | leecode刷题笔记
Btree索引和Hash索引
HGAME 2022 Week4 writeup
虎符CTF 2022 Quest-Crash Writeup
一文带你了解 ViewModel 的使用及源码解析
点云中的一些名词解释
6.0深入理解MySQL事务隔离级别与锁机制
Flink(Pometheus监控)
高精度减法
How to bounce the shell
[uniapp] uniapp WeChat applet development: no such file or directory error when starting the WeChat developer tool
ACTF 2022 writeup
【uniapp】uniapp微信小程序开发:启动微信开发者工具提示no such file or directory错误
二叉树 | 递归遍历 | leecode刷题笔记
koa框架(一)
[MySQL] Using join buffer (Block Nested Loop) in left join due to character set in mysql