Proxy的基本形式,
第一個花括號表明方法主體,第二個表明Proxy代理處理區域(至關於鉤子函數)
new Proxy({},{})
get屬性是在獲得某對象屬性值時預處理的方法,接收三個參數
一、target:獲得的目標值
二、key:目標的key值至關於對象的屬性
三、property:不經常使用用法未學習,
set屬性,是值你要改變Proxy屬性值時,進行的預先處理
一、target目標值
二、key目標值
三、value要改變的值
四、receiver改變前的原始值
var pro = new Proxy({ add: function (val) { return val + 10; }, name: 'I am Jspang' }, { get: function (target, key, property) { //console.log(property); return target[key]; }, set:function (target,key,value,receiver) { console.log(` setting ${key} = ${value}`); return target[key] = value; } }); console.log(pro.add(1)); console.log(pro.name); pro.name='小哈哈'; console.log(pro.name);
apply的使用promise
add =function () { return '我是哈' } var handler = { apply(target,ctx,args) { console.log('dodo'); console.log(Reflect.apply(...arguments))//我是哈 return Reflect.apply(...arguments) } } var pro=new Proxy(add,handler); console.log(pro())
promise對象的使用(一個多步操做的過程)
let ste=1; let ste2=2 function step1(res,rec) { console.log('1,洗菜'); if (ste==1) { res('1,洗菜-完成') } else { rec('1,洗菜-失敗') } } function step2(res,rec) { console.log('2,作飯'); if (ste==1) { res('2,作飯-完成') } else { rec('2,作飯-失敗') } } function step3(res,rec) { console.log('3,吃飯'); if (ste==1) { res('3,吃飯-完成') } else { rec('3,吃飯-失敗') } } new Promise(step1).then(function (val) { console.log(val); return new Promise(step2) }).then(function (val) { console.log(val); return new Promise(step3) }).then(function (val) { console.log(val); return val })