一.四大特征分别是:
- value
value:值,//实际存储属性值 - writable
writable:true,//控制值(value)是否可修改,默认是true可修改的 - enumerable
enumerable:true,//控制是否可用for in遍历到默认是true,即使不能for in,用"."也能访问 - configurable
//控制是否可以修改其他特性,是否可以删除属性,修改不可逆转默认是true;
二.访问和修改:
1.访问语法:
Object.getOwnPropertyDescritor(obj,"属性名");
2.修改:
Object.defineProperty(obj,"属性名",{
特性名:特性值,
特性名:特性值,
...
})
三.举例说明:
eg:
1.同时修改属性的多个特征语法:
Object.defineProperties(obj,{
属性名:{
特性名:特性值,
...
},
属性名:{
特性名:特性值,
...
},
})
var obj = {
id : 1000,
name : 'yong',
age : 22
}
//获取id的特征
var te = Object.getOwnPropertyDescriptor(obj,'id');
console.dir(te);
// 修改obj对象的id属性为只读
Object.defineProperty(obj, "id",{
writable:false
});
//批量修改
Object.defineProperties(obj,{
id:{
writable:false,
configurable:false
},
name:{
configurable:false
},
age:{
enumerable:false,
configurable:false
}
});
五.扩展:
1.值得注意的是:防止在对象创建,修改对象的结构/内容,强调:必须启用严格模式才能报错!
2.严格模式语法:
"use strict";//启动严格模式验证四大特征
- 写在js代码的第一行【全局启动严格模式】,或者函数的第一行【函数内部启动严格模式】
4.严格模式的特点:
== 将静默错误提升为报错==
5.防扩展:禁止给对象添加任何新属性
Object.preventExtensions(obj);//禁止扩展
6.密封:seal 在防扩展的基础上,再禁止删除现有属性,即不能添加,又不能删除
相当于将所有属性的configurable特性都设置为false,删除不存在的不报错
Object.seal(obj);//修改所有属性的configurable特性为false
7.冻结:禁止给对象做任何修改(包括结构和值)
Object.freeze(obj);//修改所有属性的writable特性为false