目录
- DOCTYPE html>
-
-
-
-
Document -
- class Person{
- constructor(){
- this.name=''
- this.age=12
- return validator(this,personValidator)
- }
- }
- const personValidator = {
- name(val){
- return typeof val==='string'
- },
- age(val){
- return typeof val==='number' && val>18
- }
- }
-
- function validator(target,validator){
- return new Proxy(target, {
- validator1:validator,
- set(target,key,value){
- if(target.hasOwnProperty(key)){
- let v=this.validator1[key]
- if(v(value)){
- return Reflect.set(target,key,value)
- }else{
- throw new Error(`不能设置${key}属性值为${value}`)
- }
- }else{
- throw new Error(`不存在${key}属性`)
- }
- }
- })
- }
- let p1 = new Person()
- p1.name='橘子'
- // p1.sex='msafd'
- p1.age=24
- console.log(p1);
-
设置不存在属性
设置年龄小于18岁
- DOCTYPE html>
-
-
-
-
Document -
-
-
- let inpDom =document.querySelector('input')
- let pDom =document.querySelector('p')
- let obj={
- text:''
- }
- let newObj = new Proxy(obj,{
- set:function(target,key,value){
- if(target.hasOwnProperty(key)){
- pDom.innerHTML=value
- /* 解决直接在控制台改变文本框属性值 */
- inpDom.value=value
- }
- }
- })
- inpDom.addEventListener('keyup',function(e){
- /* 获取文本框输入值 */
- newObj.text = e.target.value
- })
-
- DOCTYPE html>
-
-
-
-
Document -
- const userInfo={
- /* 私有属性通常一—_开头 */
- _id:123,
- getAllUsers:function(){
- console.log("获取所有用户信息");
- }
- }
- const proxy = new Proxy(userInfo,{
- get:function(target,property){
- if(property[0]=='_'){
- return undefined
- }
- return target[property]
- },
- set:function(target,key,value){
- if(key[0]!=='_'){
- target[key]=value
- }
- }
- })
- console.log(proxy._id);
- // proxy._id=33
-