zoukankan      html  css  js  c++  java
  • ES6基础-3

    //set 对象
        //基本
        let s = new Set();
        let t = {a:"he"};
        s.add(1);
        s.add({a:"he"});
        s.add(t);
        s.add(undefined);
        s.add(undefined);
        let n1 = NaN,n2 = NaN;
        s.add(n1);
        s.add(n2);
        console.log(s);

        //类型转换
        //数组转换成set
        var arr = [1,2,3,1];
        var s1 = new Set(arr);//数组转换成set
        console.log(s1);
        console.log([...s1]);//转换成数组
    
        console.log(new Set("string"));//字符串转换成set

        //字符串转换成set
        //set的用处 
        var test = [1,21,11,11,11,2];
        var test2 = [1,32,4];
        console.log([...(new Set(test))]);//去除重复
        console.log(new Set([...(new Set(test2)),...(new Set(test))]));//并集
    
        console.log([...(new Set(test))].filter(x=>(new Set(test2)).has(x)));//交集
        console.log([...(new Set(test))].filter(x=>!(new Set(test2)).has(x)));//差集   

    Proxy 与 Reflect 是 ES6 为了操作对象引入的 API 。

    Proxy 可以对目标对象的读取、函数调用等操作进行拦截,然后进行操作处理。它不直接操作对象,而是像代理模式,通过对象的代理对象进行操作,在进行这些操作时,可以添加一些需要的额外操作。

    var target = {
            name:"webcyh",
            age:21,
            _name:"test",
            proxy:null
        };
        var handel = {
            //get() 方法可以继承。
            get:function(target,key){
                console.log("打印"+key);
                if(key[0] == "_"){//利用拦截器实现私有属性 后边可以使用拷贝继承实现
                    throw Error("则是私有属性外部不可访问!!!");
                }
                return target[key];
            },//对于目标的属性是不可写或者不可配置set建不起作用
            set:function(target,key,value,receiver){//receiver存放对象本身
                
                console.log("设置"+key);
                if(key == "age"&&!Number.isInteger(value)){
                      throw new TypeError('年龄必须是整型类型');
                }
                target[key] = receiver;
            }
        };
    
        var p = new Proxy(target,handel);
        var obj = Object.create(p);//继承
        obj.name;
        //obj._name;
        
        p.age = 12;
        console.log(p.age === p);
        p.name = "test";//实际执行p.set()
        p.age = 32;//实际执行p.get();
        /*
        
        通过构造函数新建实例时其实是对目标对象进行了浅拷贝,因此目标对象与代理对象会互相
        代理模式
    
        目标对象可以为空对象 操作时直接赋值
    
        / handler 对象也可以为空,相当于不设置拦截操作,直接访问目标对象
    
        如果把目标对象当中电影院
        那么 handler相当于保安
        对需要访问者需要严格检测才能访问内部资源或者
    
        Object.setPrototypeOf(exam, proxy)
        以proxy为原型创建exam对象
    
    
        注意:严格模式下,set代理如果没有返回true,就会报错。
         */

    后续 。。。

  • 相关阅读:
    二叉查找树的简易实现
    二叉树的部分简单实现
    二叉树的遍历(基于栈的非递归方式实现)
    简易学生成绩管理管理系统(java描述)
    简易的学生成绩管理系统(C++实现)
    Android中使用ExpandableListView实现微信通讯录界面(完善仿微信APP)
    JAVA环境变量和TomCat服务器配置
    Android中ListView实现图文并列并且自定义分割线(完善仿微信APP)
    Android中Fragment和ViewPager那点事儿(仿微信APP)
    Android中通过ActionBar为标题栏添加搜索以及分享视窗
  • 原文地址:https://www.cnblogs.com/webcyh/p/11440032.html
Copyright © 2011-2022 走看看