原生JavaScript实现对象不可变性的三种方法详解

作者:代码拾荒

时间:2026-10-23

浏览:147

本文介绍在原生JavaScript中创建不可变对象的三种核心方法:Object.preventExtensions、Object.seal和Object.freeze。通过对比代码示例,解析如何防止属性扩展、删除及修改,帮助开发者在复杂项目中确保数据结构的稳定性与只读性。

文章目录

本文通过具体实例,详细解析了如何在原生JavaScript环境中构建不可变对象。内容旨在为开发者提供实用的参考方案,便于在实际项目中应用。

Object.preventExtensions() 防止扩展

JavaScript作为一种高度灵活的语言,允许开发者对各类数据进行重新定义。然而,随着项目复杂度的提升,可变数据结构带来的副作用日益凸显。随着JavaScript最新版本的迭代,这一局面得到改善,现在开发者能够更便捷地创建不可变对象。本文将重点介绍实现这一目标的三种不同技术手段。

所谓对象的不变性,是指对象在创建完成后,其状态应被锁定,不允许进行任何形式的修改,即将其视为只读类型。

假设我们需要定义一个 car 对象,并在整个项目中使用它的属性来执行操作。我们不能允许错误地修改任何数据。


const myTesla = {
 maxSpeed: 155,
 batteryLife: 300,
 weight: 2300
};

Object.preventExtensions() 防止扩展

此方法可防止向现有对象添加新属性,preventExtensions() 是不可逆的操作,我们永远不能再向对象添加额外的属性。


Object.isExtensible(myTesla); // true
Object.preventExtensions(myTesla);
Object.isExtensible(myTesla); // false
myTesla.color = 'blue';
console.log(myTesla.color) // undefined

Object.seal() 密封

它可以防止添加或删除属性,seal() 还可以防止修改属性描述符。


Object.isSealed(myTesla); // false
Object.seal(myTesla);
Object.isSealed(myTesla); // true

myTesla.color = 'blue';
console.log(myTesla.color); // undefined

delete myTesla.batteryLife; // false
console.log(myTesla.batteryLife); // 300

Object.defineProperty(myTesla, 'batteryLife'); // TypeError: Cannot redefine property: batteryLife

Object.freeze() 冻结

它的作用与 Object.seal() 相同,而且它使属性不可写。


Object.isFrozen(myTesla); // false
Object.freeze(myTesla);
Object.isFrozen(myTesla); // true

myTesla.color = 'blue';
console.log(myTesla.color); // undefined

delete myTesla.batteryLife;
console.log(myTesla.batteryLife); // 300

Object.defineProperty(myTesla, 'batteryLife'); // TypeError: Cannot redefine property: batteryLife

myTesla.batteryLife = 400;
console.log(myTesla.batteryLife); // 300

提示

如果希望在尝试修改不可变对象时抛出错误,请使用严格模式。

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章