zoukankan      html  css  js  c++  java
  • ES3、ES5、ES6对象代理的写法差异

    ES3的对象代理写法:

    console.log('定义私有变量ES3写法:')
    // ES3
    var Person = function (){
        var data = {
            name:'ES3',
            age:14,
            sex:'nv'
        }
        // 读API
        this.get = function(key){
            return data[key]
        }
        // 写API
        this.set = function(key,value){
            if(key !== 'sex'){
                data[key] = value
            }
        }
    }
    // 声明一个实例
    var person = new Person();
    // 读取 
    console.table({name:person.get('name'),age:person.get('age'),sex:person.get('sex')});
    // 修改 person.set('name','c-ES3') // 修改name为c-ES3 console.table({name:person.get('name'),age:person.get('age'),sex:person.get('sex')}); person.set('sex','nan') // 修改sex为nan 修改失败,因为被设置了保护 console.table({name:person.get('name'),age:person.get('age'),sex:person.get('sex')});

    ES5的对象代理写法:

    console.log('定义私有变量ES5写法:')
    // ES5
    var Person = {
       name:'ES5',
       age:14
    }
    // 设置保护,不可被写
    Object.defineProperty(Person,'sex',{
       writable:false,
       value:'nv'
    })
    // 读取
    console.table({
       name:Person.name,
       age:Person.age,
       sex:Person.sex
    })
    // 修改
    Person.name = 'c-ES5'       // 修改name为c-ES5
       console.table({
       name:Person.name,
       age:Person.age,
       sex:Person.sex
    })
    Person.sex = 'nan'          // 修改sex为nan         修改失败,因为被设置了保护
    console.table({
        name:Person.name,
        age:Person.age,
        sex:Person.sex
    })

    ES6的对象代理写法:

    console.log('定义私有变量ES6写法:')
    let Person1 = {
        name:'ES6',
        age:14,
        sex:'nv'
    }
    // 设置对象代理
    let person1 = new Proxy(Person1,{
        //
        get(target,key){
            return target[key]
        },
        //
        set(target,key,value){
            if(key !== 'sex'){
               target[key] = value
            }
        }
    });
    // 读取
    console.table({
        name:person1.name,
        age:person1.age,
        sex:person1.sex
    })
    // 修改name为c-ES6
    person1.name = 'c-ES6'
    console.table({
        name:person1.name,
        age:person1.age,
        sex:person1.sex
    })
    // 修改sex为nan         修改失败,因为被设置了保护
    person1.sex = 'nan'
    console.table({
        name:person1.name,
        age:person1.age,
        sex:person1.sex
    })
  • 相关阅读:
    分页存储过程
    调存储过程
    winform httplicent调用API
    存储过程,触发器,等等。。。
    C# AJAXform上传图片
    Mysql order by与limit联用出现的问题
    将Sublime Text 3 放到右键中
    Vue-cli构建步骤
    Javascript面试知识点
    position详解
  • 原文地址:https://www.cnblogs.com/xue-shuai/p/11539674.html
Copyright © 2011-2022 走看看