当前位置:网站首页>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();
边栏推荐
- [MySQL] Using join buffer (Block Nested Loop) in left join due to character set in mysql
- CSAPP lab0 实验环境搭建
- ACTF 2022 writeup
- MySQL之JDBC编程增删改查
- 二叉树 | 对称二叉树、相同的树、子树相同 | leecode刷题笔记
- 房间虚拟样板间vr制作及价格
- HGAME 2022 Final Pokemon v2 writeup
- 【MySQL】mysql因为字符集导致left join出现Using join buffer (Block Nested Loop)
- koa框架(一)
- Configuring vim(7) from scratch - autocommands
猜你喜欢
随机推荐
MySQL之JDBC编程增删改查
"Linux" pagoda panel set up MySQL slow query log, not walk index log
还在用 Xshell?你 out 了,推荐一个更现代的终端连接工具,好用到爆!
MySQL学习笔记(1)——基础操作
vr工业操作培训模拟系统可以应用到哪些场景中
细谈APP开发焦点问题:AMS 系统时间调节原理
HPb59-1铅黄铜
企业小程序怎么开发自己的小程序?
IFIT的架构与功能
腾讯云轻量应用服务器配置及建网站教程
信息系统项目管理师核心考点(六十五)信息安全基础知识网络安全
一文带你了解 ViewModel 的使用及源码解析
一、ICESat-2数据查询,下载,与处理
数学建模准备知识
How to bounce the shell
常见的加密方式有哪几种,各有哪些优缺点
小程序平台工具如何选择和使用?
Mysql之部分表主从搭建及新增表
HGAME 2022 复盘 writeup
CSAPP lab0 实验环境搭建









