ECMAScript5 对象修改保护 扩展(Object.preventExtensions) 密封(Object.seal)和冻结(Object.freeze)

JavaScript默认情况下,你可修改任何可以访问到的对象。但在多人协作开发的项目中,这会造成很大问题。如果你是一个模块或代码库的作者,你可能想锁定一些核心库的某些部分,保证任何人不能有意或无意的修改它们。ECMAScript 5引入了几个方法来防止对对象的修改。

防止扩展,禁止为对象添加属性和方法,但已存在的属性和方法是可以被修改和删除的。不可增加, 可修改 可删除

密封,防止扩展,但禁止删除对象已存在的属性和方法。不可增加, 可修改 不可删除

冻结,禁止修改对象已存在的属性和方法,所有字段都是只读的。不可增加, 不可修改 不可删除

防止扩展用Object.preventExtensions()Object.isExtensible()方法用来检测对象是否是可扩展的

判断一个对象是否可扩展,即是否可以给它添加新属性

var Person = {
  name: 'liuht'
}

//防止扩展
Object.preventExtensions(Person);
console.log(Object.isExtensible(Person)); 		//	-> false
Person.sex = 1; 					//严格模式下抛出异常,正常模式下失败无提示

密封对象用Object.seal()Object.isSealed()方法用来检测对象是否是密封的。

让一个对象密封,并返回被密封后的对象。密封对象是指那些不能添加新的属性,不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性,但可以修改已有属性的值的对象。

var Person = {
        name: 'liuht'
    }

    //密封
    Object.seal(Person);
    console.log(Object.isSealed(Person));		// -> true
    console.log(Object.isExtensible(Person)); 	//	-> false
    delete Person.name;				//严格模式下抛出异常,正常模式下安静的失败
    Person.name = 10;				//严格模式下抛出异常,正常模式下安静的失败
    console.log(Person.name) //10
冻结对象用Object.freeze()方法,Object.isFrozen()方法用来检测对象是否是冻结的。

这个方法比 Object.seal 更绝,冻结对象是指那些不能添加新的属性,不能修改已有属性的值,不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性的对象。也就是说,这个对象永远是不可变的。

var Person = {
  name: 'liuht'
}

//冻结对象
Object.freeze(Person);
console.log(Object.isFrozen(Person));		// -> true
console.log(Object.isSealed(Person));		// -> true
console.log(Object.isExtensible(Person)); 	//	-> false
delete Person.name;				//严格模式下抛出异常,正常模式下安静的失败
Person.age = 10;				//严格模式下抛出异常,正常模式下安静的失败
Person.name = 'new name';		//严格模式下抛出异常,正常模式下安静的失败

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值