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 })