Menu
CoddyTech

封装

本课属于 Coddy JavaScript 学习旅程的“面向对象编程”单元。第 17 课,共 56 课。

封装是将数据封装在类中,并组合成一个单元的过程。

这样可以限制对类数据的直接访问,最终帮助我们避免意外修改数据。 

我们通过一个简单的例子来看看封装如何发挥作用。创建一个带有公共属性的基本对象:

const user = {
  name: "John",
  email: "john@example.com"
};

任何人都可以直接访问和修改这些属性:

user.name = "Jane"; // 可以轻松地从外部修改
console.log(user.email); // 可以轻松地从外部访问

一种封装性更强的方法是使用闭包来隐藏数据:

function createUser(name, email) {
  // 这些变量是私有的(已封装)。
  let userName = name;
  let userEmail = email;
  
  // 返回一个对象,其中的方法可用于访问和修改私有数据。
  return {
    getName: function() {
      return userName;
    },
    getEmail: function() {
      return userEmail;
    },
    setName: function(newName) {
      userName = newName;
    }
  };
}
const encapsulatedUser = createUser("John", "john@example.com");

现在,来与数据进行交互:

console.log(encapsulatedUser.getName()); // "John"
encapsulatedUser.setName("Jane");
console.log(encapsulatedUser.getName()); // "Jane"

// 无法直接访问数据
console.log(encapsulatedUser.userName); // undefined
challenge icon

挑战

给定的代码使用封装来保护用户数据。你的任务是添加一个 getAge() 方法来访问年龄。

测试会检查:

  • getAge() 方法是否存在
  • 是否返回正确的年龄
  • 年龄信息是否仍为私有

预期输出:

john_doe

25

亲手试试

import { createUser } from './createUser.js';

// 测试代码,请勿修改
const user = createUser("john_doe", 25);
console.log(user.getUsername()); // 应输出 "john_doe"
console.log(user.getAge());      // 应输出 25

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: JavaScript 在线编译器