ES6新特性使用小結(四)

2022-09-14 01:18:10 字數 2057 閱讀 6474

①、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 實現業務的解耦

function

validator(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...