Proxy的基本形式,
第一个花括号代表方法主体,第二个代表Proxy代理处理区域(相当于钩子函数)
new Proxy({},{})
get属性是在得到某对象属性值时预处理的方法,接收三个参数
1、target:得到的目标值
2、key:目标的key值相当于对象的属性
3、property:不常用用法未学习,
set属性,是值你要改变Proxy属性值时,进行的预先处理
1、target目标值
2、key目标值
3、value要改变的值
4、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的使用
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 })