通过使用()函数将obj对象的pro1属性修改为不可写,这样,通过对象的属性形式实现了只读变量
defineProperty接收三个参数
- object(必须有,操作的对象本身)
- propertyname(必须有,属性名,添加修改属性得有的属性名)
- descriptor(必须有,属性描述)
descriptor内配置可有可无,value默认undefind,其余默认为false
- 设置属性的值:value
- 是否可操作属性值:writable
- 是否可修改配置:configurable如果值为false,descriptor内的属性不可操作
- 是否可枚举:enumerable
var obj = {pro1: 1};
Object.defineProperty(obj, "pro1", {writable: false});
obj.pro1 = 2;
console.log(obj.pro1);//控制台显示1
使用对象属性的访问特性
var obj = {pro1: 1};
Object.defineProperty(obj, "pro1", {
get: function () {
return 1;
},
set: function (newValue) {
this.pro1 = 1
}
});
obj.pro1 = 2;
console.log(obj.pro1);//显示1
冻结对象
()函数在标准中的描述是“Prevents the modification of existing property attributes and values, and prevents the addition of new properties.”。即:阻止修改对象中现有属性的值和特性,并阻止添加新属性。这样,整个对象都成了只读的了,对象里面无论有多少属性,统统都变成只读的了。
var obj = {a: 1}
Object.freeze(obj)
obj.a = 2
console.log(obj.a)
闭包
这里用了闭包的缓存功能,将匿名函数中的a变量缓存起来,间接实现了只读的功能。
var obj = (function () {
var a = 1
return function () {
return a
}
})()
console.log(obj())