这里有一个对象
var student = {
name : 'zizi',
age : 16,
hobbly : 'sleep'
};
console.log(student)
/*{name: "zizi", age: 16, hobbly: "sleep"}
age: 16
hobbly: "sleep"
name: "zizi"
__proto__: Object*/
对象性进行操作:

这么操作是很方便,可是这样不都是谁都可以对你的对象进行操作,安全性一点也能不高,所以——— Object.defineProperty() 来了。
Object.defineProperty() 的参数
Object.defineProperty 有三个参数 (object,propName,descriptor)
- object 对象,对哪个对象进行操作
- propName 属性名,操作的属性名
- descriptor 属性描述,属性的样式特征
descriptor 数据属性 属性特征:
Configurable
表示能否通过delete删除此属性,能否修改属性的特性,或能否修改把属性修改为访问器属性,如果直接使用字面量定义对象,默认值为trueEnumerable
表示该属性是否可枚举,即是否通过for-in循环或Object.keys()返回属性,如果直接使用字面量定义 对象,默认值为trueWritable 能否修改属性的值,如果直接使用字面量定义对象,默认值为true
Value 该属性对应的值,默认为undefined
对象进行操作:
var student = {
sname : "Zizi",
sId : 19,
sAge : 16
};
//给对象增加一个 score属性
Object.defineProperty(Zizi,'score',{
value : 60,
writable : true
});
/*
sAge: 16
sId: 19
sname: "Zizi"
score: 60
*/
上面只是对一个属性值进行操作,当要对数个属性进行操作时
如果是这样:
var Zizi = {
sname : "Zizi",
sId : 19,
sAge : 16,
salary : 100000
}
Object.defineProperty(Zizi,'score',{
value : 60,
writable : true
});
//id 不可删除
Object.defineProperty(Zizi,'sId',{
configurable : false,
});
//姓名不可删除
Object.defineProperty(Zizi,'sname',{
configurable : false,
});
//工资不可枚举
Object.defineProperty(salary,'sname',{
enumerable : false,
});
需要写上一大串,object. 这个属性怎么样,哪个属性有什么操作方式,太麻烦啦,这个时候就需要Object.defineProperties()
Object.defineProperties() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象
参数和 Object.defineProperty() 一样的
看看他怎么使用:
function Emp(id,ename,salary,age){
this.id = id;
this.ename = ename;
this.salary = salary;
var _age;
Object.defineProperties(this,{
//只读 禁止删除
id:{
writable : false,
configurable :false
},
// 姓名 禁止删除
ename:{
configurable : false
},
//工资 禁止遍历
salary:{
enumerable : false,
configurable : false
},
// 年龄 18-65岁
age:{
get(){
return _age;
},
set(val){
if(val >= 18 && val <= 65){
_age = val;
}else{
throw new RangeError("年龄必须在18到65岁")
}
},
enumerable : true
},
});
this.age = age; // 讲age挂到对象中
}

这样不就是很方便,只需要对对象操作i一次, Object.defineProperties()就相当于是Object.defineProperty() 的一个综合操作,看它们的写法 defineProperty 改y 为i加上es就是复数形式。
本文深入探讨了JavaScript中使用Object.defineProperty()和Object.defineProperties()来增强对象属性的安全性,包括如何设置只读、禁止删除及不可枚举的属性,以及如何实现属性值的有效范围检查。
1736

被折叠的 条评论
为什么被折叠?



