Proxy(代理)例子
//总结 Proxy传入两个参数第一个是一个对象实例 一个是对象(里面定义get set方法)
使用时proxy的实例加.调用,这会触发第二个对象实参里的get方法
get有两个参数 get(target,attr) target是这个proxy的实例 也就是本身this
attr是实例调用.之后的属性,
dom.div({},,,)传入的实参传给了get方法里的回调函数
<script type="text/javascript"> var user = { name:"小明", age:16 } //设置代理对象 var pUser = new Proxy(user,{ //代理获取属性事件 get(target,attr){ //console.log(target) //console.log(attr) return target[attr] }, set(target,attr,value){ // console.log(target) // console.log(attr) // console.log(value) if(value>=0&&value<150){ target[attr] = value; }else{ console.warn("不能设置超出范围的年龄,范围是(0-150)") } } }) var age = pUser.age //16 </script>
proxy应用
<script type="text/javascript"> /* DOM.div({id:"d1",'class':"redBg"},"helloworld","你好") DOM.ul({id:"ul",'data-index':"abc"}) DOM.img({src:"1.jpg"}) DOM.h1({'class':"blueBg"},"hello") */ let DOM = new Proxy({},{ get(target,attr){ //console.log(123) var domObj = document.createElement(attr); return function(attrs,...children){ for(key in attrs){ domObj.setAttribute(key,attrs[key]) } for(let i = 0;i<children.length;i++){ if(typeof children[i] == 'string'){ children[i] = document.createTextNode(children[i]) } domObj.appendChild(children[i]) } return domObj; } } }) var d1 = DOM.div({id:"d1",'class':"redBg"},"helloworld","你好"); document.body.appendChild(d1); var ul = DOM.ul( {id:"liebiao",'class':"redBg"}, DOM.li({'class':"li"},"列表1"), DOM.li({'class':"li"},"列表2"), DOM.li({'class':"li"},"列表3"), DOM.li({'class':"li"},"列表4"), ); document.body.appendChild(ul); var img = DOM.img({src:"img/ty.png"}); document.body.appendChild(img) </script>