摘要:一般来说,默认情况下,对象都是可拓展的,我们可以为其属性进行增删改等操作,也可以更改他们原型的指向,如何让一个对象变得不可拓展呢,我们可以使用提供的几个方法,来保证锁定的对象是不可拓展的可以锁定对象,设置对象的不可拓展,可以阻止为对象添加新
一般来说,默认情况下,对象都是可拓展的,我们可以为其属性进行增删改等操作,也可以更改他们原型的指向,如何让一个对象变得不可拓展呢,我们可以使用ES5提供的几个方法,来保证锁定的对象是不可拓展的
Object.preventExtensions
Object.preventExtensions可以锁定对象,设置对象的不可拓展,可以阻止为对象添加新的属性,非严格模式下会默默不起作用,但是严格模式下会报错,可以用Object.isExtensible判断对象是否可拓展
var person = { name: "cala" }; Object.preventExtensions(person); person.name = "John"; person.age = 24; // 严格模式下会报错: TypeError: Cannot add property age, object is not extensible console.log(person) // {name: "John"}
Object.seal
Object.seal和上面的Object.preventExtensions方法作用是一样,字面意思是密封,也是用来防止对象被拓展,另外还可以阻止对象已有属性和方法的删除,可以用Object.isSealed判断对象是否可拓展
var person = { name: "cala" }; Object.seal(person); console.log(Object.isExtensible(person)); // false console.log(Object.isSealed(person)); // true delete person.name // 删除属性失败 严格模式下 Uncaught TypeError: Cannot delete property "name" of #
Object.freeze
作用与上述两个方法大致相同,字面意思是冰冻,还可以阻止对象的属性和方法被修改,可以用Object.isFrozen判断对象是否可拓展
var person = { name: "cala" }; Object.freeze(person); console.log(Object.isExtensible(person)); // false console.log(Object.isSealed(person)); // true console.log(Object.isFrozen(person)); // true person.name = "xyz"; person.age = 30; delete person.name //上述三个操作,非严格模式不起作用,严格模式会报错 console.log(person) // {name: "cala"}
总的来说,上述三个操作方法preventExtensions,seal,freeze可以设置对象的不可拓展性,并且每个方法都针对对象的不可拓展有着不同的限制,另外还有三个判断方法,isExtensible,isSealed,isFrozen来对对象进行操作,返回Boolean值,来判断对象是否可拓展
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/91405.html
摘要:对象直接量的默认值表示能否通过循环返回属性。同样密封对象操作是不可逆的。代表未冻结已冻结属性特性规则总结如果对象是不可拓展的,则可以编辑已有的自有属性,但不能给它添加新属性。 写在前面 注:这个系列是本人对js知识的一些梳理,其中不少内容来自书籍:Javascript高级程序设计第三版和JavaScript权威指南第六版,感谢它们的作者和译者。有发现什么问题的,欢迎留言指出。 1.数据...
摘要:没有模块化的支持,使用开发大型应用将举步维艰,所以经过大量的实践,社区制定了一些模块加载方案,最主要的有运行于浏览器的方案和运行于以为代表的服务端的方案。该方法返回被冻结的对象。 背景 ES Module是JavaScript在ES2015版本开始提供的语言标准级别的模块化方案,在此之前JavaScript一直没有语言级别的模块化体系。没有模块化的支持,使用JavaScript开发大型...
摘要:简单说就是一个有一个函数,这个函数执行的返回值一定是一个对象,对象有两个属性标记迭代是否结束,标记这次迭代的结果值。 引言 遍历对象是平常工作中很常见的一个操作,几乎是日常操作,但是遍历对象真的是一件很容易的事情么,显然不是的。 常用的方式 for...in for (variable in object) {...} 这个是一个很常见的用法,相信每个人顺手都可以写出来。但是这里需要主...
摘要:属性描述符升级打怪必备技能对象有自己的属性和方法,对于我们对象的属性来讲,属性还有自己的属性,又称为属性描述符。这个方法接受三个参数,第一个是指定的对象,第二个是指定的对象参数,第三个当然是要修改的属性描述符了。 对象的声明有俩种: 字面量 通过new一个构造函数Object 两者唯一的区别就是,字面量形式,可以一次赋值多个,通过new Object就得一个一个赋值 数据类型 ...
阅读 2294·2023-04-25 20:07
阅读 3267·2021-11-25 09:43
阅读 3636·2021-11-16 11:44
阅读 2503·2021-11-08 13:14
阅读 3155·2021-10-19 11:46
阅读 869·2021-09-28 09:36
阅读 2904·2021-09-22 10:56
阅读 2339·2021-09-10 10:51