封装
本课属于 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挑战
给定的代码使用封装来保护用户数据。你的任务是添加一个 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
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
8整理 OOP 代码
将类组织到模块中自己练习: JavaScript 在线编译器