详解Javascript中的Object对象(4)

该方法接收一个要被设置成无法扩展的对象作为参数,需要注意两点:
1、对象的属性不可用扩展,但是已存在的属性可以被删除
2、无法添加新属性指的是无法在自身上添加属性,如果是在对象的原型上,还是可以添加属性的。

function Person(name) { this.name = name; } var person = new Person("Jack"); Object.preventExtensions(person); delete person.name; console.log(person.name);//undefined Person.prototype.age = 15; console.log(person.age);//15

Object.isExtensible方法用来判断一个对象是否可扩展,默认情况是true

将对象密封

Object.seal可以密封一个对象并返回被密封的对象。
密封对象无法添加或删除已有属性,也无法修改属性的enumerable,writable,configurable,但是可以修改属性值。

function Person(name) { this.name = name; } var person = new Person("Jack"); Object.seal(person); delete person.name; console.log(person.name);//Jack

将对象密封后,使用delete删除对象属性,还是可以访问得到属性。

通过Object.isSealed可以用来判断一个对象是否被密封了。

冻结对象

Object.freeze方法用来冻结一个对象,被冻结的对象将无法添加,修改,删除属性值,也无法修改属性的特性值,即这个对象无法被修改。

function Person(name) { this.name = name; } var person = new Person("Jack"); Object.freeze(person); delete person.name; console.log(person.name);//Jack Person.prototype.age = 15; console.log(person.age);//15

分析上面的代码我们可以发现,被冻结的对象无法删除自身的属性,但是通过其原型对象还是可以新增属性的。

通过Object.isFrozen可以用来判断一个对象是否被冻结了。

可以发现:这三个限制对象的方法的限制程度是依次上升的。

总结

Object虽说是一个我们平时开发中最经常用到的对象,但是它的很多功能还没有被我们挖掘出来。本文首先介绍了Object的基本使用,接着介绍了一些比较少使用到的属性特性,最后分析了一些比较常用的方法,尤其是ES5中提供的新方法。欢迎大家交流!!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wgyszs.html