首页
mac
it
登录
6mi
u
盘
搜
搜 索
it
es6 语法 (Proxy和Reflect 的对比)
es6 语法 (Proxy和Reflect 的对比)
mac
2022-06-30
23
{
//
原始对象
let obj=
{ time:
'2017-03-11'
, name:
'net'
, _r:
123
};
//
(代理商)第一个参数代理对象,第二个参数真正代理的东西
let monitor=
new
Proxy(obj,{
//
拦截对象属性的读取
get(target,key){
return
target[key].replace('2017','2018'
) },
//
拦截对象设置属性
set(target,key,value){
if
(key==='name'
){
//
赋值并返回
return
target[key]=
value; }
else
{
//
不做操作直接返回
return
target[key]; } },
//
拦截key in object操作
has(target,key){
if
(key==='name'
){
return
target[key] }
else
{
return
false
; } },
//
拦截delete
deleteProperty(target,key){
if
(key.indexOf('_')>-1
){
delete
target[key];
return
true
; }
else
{
return
target[key] } },
//
拦截Object.keys,Object.getOwnPropertySymbols,Object.getOwnPropertyNames
ownKeys(target){
return
Object.keys(target).filter(item=>item!='time'
) } }); console.log(
'get',monitor.time);
//
2018-03-11
//
操作
monitor.time='2018'
; monitor.name
='mukewang'
; console.log(
'set',monitor.time,monitor);
//
2018-03-11;{time: "2017-03-11", name: "mukewang", _r: 123}
console.log(
'has','name'
in
monitor,'time'
in
monitor);
//
true;false
delete
monitor.time; console.log(
'delete',monitor);
//
{time: "2017-03-11", name: "mukewang", _r: 123}
//
delete
monitor._r; console.log(
'delete',monitor);
//
{time: "2017-03-11", name: "mukewang"}
console.log(
'ownKeys',Object.keys(monitor));
//
["name", "_r"]
} { let obj
=
{ time:
'2017-03-11'
, name:
'net'
, _r:
123
}; console.log(
'Reflect get',Reflect.get(obj,'time'));
//
get 2017-03-11
Reflect.set(obj,'name','mukewang'
); console.log(obj);
//
{time: "2017-03-11", name: "mukewang", _r: 123}
console.log('has',Reflect.has(obj,'name'));
//
true
}
更多专业前端知识,请上
【猿2048】www.mk2048.com
转载请注明原文地址: https://mac.8miu.com/read-73530.html
最新回复
(
0
)