javascript对象保护

javascript对象保护

 { //四大特性: 
    value: //实际存储属性值
    
    writable: true/false, //控制是否可修改
    
    enumerable: true/false, //控制是否可被for in遍历
    //但是,用.依然可强行访问该属性
    
    configurable: true/false, //控制是否可删除该属性
    //控制是否可修改另外两个特性
}

保护数据属性的两种方法:

1.修改单条数据的属性

Object.defineProperty

 var eric = {
            id: 1000,
            ename: 'LiLei',
            salary: 8000
        }
   // 设置eric 对象的salary属性为进制遍历
        Object.defineProperty(eric, 'salary', {
            enumerable: false //控制是否可被for in遍历
        })
2.同时修改多条数据属性

Object.defineProperties

   var stu = {
            sid: 'A110',
            sname: 'HanMeimei',
            score: 76
        }
        Object.defineProperties(stu, {
            sid: {
                writable: false, //控制是否可修改
                configurable: false //控制是否可删除该属性 控制是否可修改另外两个特性
            },
            sname: {
                configurable: false //控制是否可删除该属性 控制是否可修改另外两个特性
            },
            score: {
                enumerable: false,//控制是否可被for in遍历
                configurable: false //控制是否可删除该属性 控制是否可修改另外两个特性
            }
        });

现在有个需求让外人访问不到对象内部的真实的存值得变量名

 // "use strict"; //开启严格模式,一定要写在代码块的第一行
        var obj = {
            id: 1000,
            name: 'abc'
                // _age: 25 //实际存储属性值,18-65之间的值为有效值
        };

        (function() {
            var _age;
            Object.defineProperty(obj, 'age', {
                get: function() {
                    return _age;
                },
                set: function(value) {
                    if (value >= 18 && value <= 65) {
                        _age = value;
                    } else {
                        throw new RangeError("年龄必须在18~65之间!");
                    }
                }
            });
        })();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值