①、proxy 的概念和常用方法
;let monitor = new proxy(obj, ,
set(target, key, value) else
},//攔截 key in object 操作
has(target, key) else
},//攔截對 delete 操作
deleteproperty(target, key)
else
},//攔截object.keys(),object.getownpropertysymbols(),object,getownpropertynames() 等方法
ownkeys(target)
});//3、使用者訪問的是 monitor
console.log('
get', monitor.time); //
get 2018-09-20 讀取的資料被**修改了
monitor.time = '
2018-01-15';
monitor.name = '
com'
; console.log(
'set
', monitor.time, monitor.name); //
set 2018-09-20 net time屬性的修改無法生效
console.log(
'has
', '
name
'in monitor, '
time
'in monitor); //
has true false time屬性被我們攔截了
delete monitor.time;
delete monitor._r;
console.log(
'delete
', monitor); //
delete proxy _r屬性被刪除 而對time的操作被攔截
console.log(
'ownkeys
', object.keys(monitor)) //
ownkeys ["name"] time屬性被攔截
}
②、reflect 的概念和用法
;console.log('
reflect get
', reflect.get(obj, '
time
')); //
reflect get 2017-09-20
console.log(
'reflect set
', reflect.set(obj, '
name
', '
com'
), obj);
//reflect set true
console.log(
'reflect has
', reflect.has(obj, '
_r')); //
reflect has true
③、使用 proxy 和 reflect 實現業務的解耦
functionvalidator(target, validator)
else
到$`);}}
else
不存在`)}}
});}const uservalidator = /.test(val);
},phone(val)$/.test(val)
}}class user
}let u = new user(); //
初始化 得到 user 的**
= 'a' //不符合 驗證規則 丟擲錯誤 無法設定a到name
console.log(u.name='lain',u.phone=13797154666,u); //
proxy
ES6新特性使用小結(三)
symbol 資料型別 概念 symbol 提供乙個獨一無二的值 console.log obj obj for let key,value of object.entries obj object.getownpropertysymbols obj foreach function item re...
es6新特性 ES6新特性(一)
var 1 var宣告的是函式作用域 區域性 但在if for等定義的變數是全域性的 2 var 具有變數提公升,預解析 3 在同乙個作用域下,var可以宣告多次 4 var 宣告的變數會掛載到window上 let1 let不存在變數提公升,在變數使用之前,必須要先宣告 2 let在同一作用域下,...
ES6新特性須知
1.1es5之前函式想要賦預設值var funes5 function a,b,c 1.2es6開始函式想要賦預設值var funes6 function a 50,b 60,c 70 2.1es5之前字串拼接或者拼接屬性值只能如下var a lbj var b 50 var c name a ye...