ES6--变量私有化(对象代理)

1. ES3

    为了保护变量,我们应该将某些变量私有化,使它无法被直接操作。

    在ES3中,我们这样写:

    function Animal(){

    var data = { //这里不用this.name, this.sound,那么实例就无法直接操作name和sound了

        name: 'juju',

        sound: 'meow'

    };

  

    this.get = function(key){

        return data[key];

    }

    this.set = function(key, value){

        data[key] = value;

        }

    };

  var a = new Animal();

  a.get('sound');//meow

  a.set('food','human');

  a.get('food');//human


2. ES5

    var Animal = {

        name: 'juju',

        sound: 'meow'

    };

    Object.defineProperty(Animal, 'food', {

        writable: false,

         value: 'human'

});

将"food"设置writable为false即不可写。就保护了food不被改变。

 3. ES6

    var Animal={

        name:'juju',

        sound:'meow',

        food:'human'

};

var animal = new Proxy(Animal, {

    get(target, key){

        return target[key]

    },

    set(target,key,value){

        if(key !=='food'){

            target[key] = value;

            }

    }

})


animal.name; //juju

animal.sound;//meow

animal.food;//human


try{

    animal.food = 'fruit';//animal.food在set方法里面设置不能修改, 有的浏览器可能报错,本人的chrome并未报错

} catch(e){

}

animal.food;//human

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值