• js es6 Proxy


    传统的get,set

    ES6 中引入Proxies,让你可以自定义Object的基本操作。例如,get就是Object的基础操作方法。

    const obj = {
    val: 10
    };

    console.log(obj.val);

    这里,console.log()表达式在对象obj上执行get方法来获取val的值。

    另一个对象的基本操作方法是 set。

    const obj = {
    val: 10
    };

    obj.val2 = 20;

    这里,set方法用来给对象obj设置一个新的值。

    proxy

    const handler={
    	get:function(obj,prop){
    		console.log('get');
    		return obj[prop];
    	}
    }
    const initialobj={
    	id:1,
    	name:'Foo Bar'
    }
    const proxiedObject=new Proxy(initialobj,handler);
    console.log(proxiedObject.id);
    

    这个时候我们得到的结果为1,那么这样有什么用呢?可以想象一下假如我们暴露出整个initialobj对象,那么其中的属性会全部暴露出去。
    proxy这个意思是代理的意思,那么这个时候我们可以这样处理。
    比如我想封装这个initialobj对象,那么我改如何?
    或者说我想让id为private,ok,这就是一个困难了。
    当然我们有方法的,比如说,拆分,但是这不是ok的。

    
    const handler={
    	get:function(obj,prop){
    		if(prop=='id')
    		{
    			return 6;
    		}
    		console.log('get');
    		return obj[prop];
    	}
    }
    const initialobj={
    	id:1,
    	name:'Foo Bar'
    }
    const proxiedObject=new Proxy(initialobj,handler);
    console.log(proxiedObject.id);
    

    这个时候就是返回6了,相当于代理,门卫,引领三个关键词。

    <script>
      const handler = {
    	get: function(obj, prop) {
    	  if (prop == "id") {
    		return 6;
    	  }
    	  console.log("get");
    	  return obj[prop];
    	},
    	set: function(obj, prop, value) {
    	  if (typeof value !== "string") {
    		throw new Error("Only string values can be stored in this object!");
    	  } else {
    		obj[prop] = value;
    	  }
    	}
      };
      const initialobj = {
    	id: 1,
    	name: "Foo Bar"
      };
      const proxiedObject = new Proxy(initialobj, handler);
      console.log(proxiedObject.id);
      proxiedObject.name = 8;
    </script>
    

    set 同样是 代理 门卫 引领 三个关键词来表达。

  • 相关阅读:
    每日一练4
    每日一练3
    每日一练2 字符串逆序输出
    每日一练1
    python全局变量
    python __file__ 与argv[0]
    python 静态方法和类方法
    常用的python库(不断更新)
    django 自定义用户user模型的三种方法
    实例详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化(三)
  • 原文地址:https://www.cnblogs.com/aoximin/p/13201055.html
Copyright © 2020-2023  润新知