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之间!");
}
}
});
})();