返回

红宝书笔记——JavaScript 面向对象和属性保护

前端

JavaScript 面向对象和属性保护

在 JavaScript 中,对象是键值对的集合,键是属性名称,值是属性值。对象可以存储各种类型的数据,包括字符串、数字、布尔值、数组、对象等等。

JavaScript 中的对象是动态的,这意味着它们的属性和值可以在运行时被添加、修改或删除。这使得 JavaScript 非常灵活,但它也可能导致意外的属性修改。

为了防止意外的属性修改,我们可以使用 JavaScript 的属性保护机制。属性保护允许我们控制哪些属性可以被修改,哪些属性不能被修改。

Object.defineProperty() 方法

JavaScript 中的 Object.defineProperty() 方法允许我们修改对象的属性的默认特性。这个方法接受三个参数:

  • 属性所在的对象
  • 属性的名字
  • 一个符对象

符对象是一个 JavaScript 对象,它可以包含以下属性:

  • value: 属性的值。
  • writable: 布尔值,指示属性的值是否可以被修改。
  • enumerable: 布尔值,指示属性是否可以在 for-in 循环中被枚举。
  • configurable: 布尔值,指示属性的特性是否可以被修改。

如何使用 Object.defineProperty() 方法

以下是如何使用 Object.defineProperty() 方法来修改对象的属性的默认特性的示例:

const person = {};

// 定义一个不可修改的属性
Object.defineProperty(person, "name", {
  value: "John Doe",
  writable: false,
  enumerable: true,
  configurable: false
});

// 尝试修改属性的值
person.name = "Jane Doe";

// 检查属性的值是否被修改
console.log(person.name); // 输出:John Doe

在这个示例中,我们使用 Object.defineProperty() 方法将 person 对象的 name 属性定义为不可修改的。这意味着该属性的值不能被修改。

当我们尝试修改属性的值时,该值不会被修改,并且控制台会输出属性的原始值。

总结

JavaScript 中的属性保护机制允许我们控制哪些属性可以被修改,哪些属性不能被修改。这可以防止意外的属性修改,并使我们的代码更加健壮。

Object.defineProperty() 方法是 JavaScript 中用于修改对象属性的默认特性的方法。我们可以使用这个方法来实现属性保护。