TypeScript - 访问修饰符:代码隐私的友好指南

你好,未来的编程超级巨星!? 我很兴奋能成为你探索 TypeScript 访问修饰符这个激动人心旅程的向导。作为一个教编程多年的老师,我可以告诉你,理解这些概念就像学习编程世界的秘密握手。那么,让我们一起来揭开这些谜团吧!

TypeScript - Access Modifiers

访问修饰符是什么?

在我们具体探讨之前,让我们先聊聊访问修饰符是什么。想象你正在建造一个超级酷的树屋(这就是我们的代码!)。访问修饰符就像你设定的规则,决定谁能爬上去,谁能窥视里面,谁能使用秘密隔间。它们帮助我们控制代码的哪些部分可以被访问和使用。

在 TypeScript 中,我们有三个主要的访问修饰符:

修饰符 描述
public 从任何地方都可以访问
private 仅在同一个类内部可访问
protected 在类及其子类内部可访问

现在,让我们详细探索每一个!

公共访问修饰符

public 修饰符就像把你的树屋门敞开。任何人都可以进来,使用秋千,或者借阅你的漫画书。在代码术语中,这意味着程序的任何部分都可以访问和使用这些元素。

这里有一个有趣的例子:

class Superhero {
public name: string;
public power: string;

constructor(name: string, power: string) {
this.name = name;
this.power = power;
}

public usePower() {
console.log(`${this.name} 使用了 ${this.power}!`);
}
}

const spiderman = new Superhero("蜘蛛侠", "射网");
console.log(spiderman.name); // 输出: 蜘蛛侠
spiderman.usePower(); // 输出: 蜘蛛侠 使用了 射网!

在这个例子中,namepowerusePower() 都是公共的。我们可以在代码的任何地方访问和使用它们。就像蜘蛛侠在城中自由穿梭一样!

私有访问修饰符

现在,让我们来谈谈 private。这就像在你的树屋中有一本只有你能看的秘密日记。在 TypeScript 中,private 成员只能在同一个类内部访问。

让我们更新一下我们的 Superhero 类:

class Superhero {
public name: string;
private secretIdentity: string;

constructor(name: string, secretIdentity: string) {
this.name = name;
this.secretIdentity = secretIdentity;
}

private changeClothes() {
console.log("在电话亭里快速换装!");
}

public goOnMission() {
this.changeClothes();
console.log(`${this.name} 准备行动!`);
}
}

const superman = new Superhero("超人", "克拉克·肯特");
console.log(superman.name); // 输出: 超人
// console.log(superman.secretIdentity); // 错误!secretIdentity 是私有的
// superman.changeClothes(); // 错误!changeClothes() 是私有的
superman.goOnMission(); // 这有效!输出: 在电话亭里快速换装!超人 准备行动!

看到我们无法直接访问 secretIdentity 或调用 changeClothes() 吗?这就是 private 的力量!它保护了超人的秘密。

受保护访问修饰符

最后但同样重要的是 protected。把它想象成一条特殊的树屋规则,适用于你和你的兄弟姐妹,但不适用于邻居家的小孩。在 TypeScript 中,protected 成员在类及其子类中可访问。

让我们创建一个超级英雄家庭:

class Superhero {
public name: string;
protected superpower: string;

constructor(name: string, superpower: string) {
this.name = name;
this.superpower = superpower;
}

protected useSuperpowerInternal() {
console.log(`内部使用 ${this.superpower}`);
}
}

class Sidekick extends Superhero {
public useSuperheroPower() {
console.log(`${this.name} 借用力量: ${this.superpower}`);
this.useSuperpowerInternal();
}
}

const batman = new Superhero("蝙蝠侠", "装备");
const robin = new Sidekick("罗宾", "体操");

// console.log(batman.superpower); // 错误!superpower 是受保护的
// batman.useSuperpowerInternal(); // 错误!useSuperpowerInternal() 是受保护的

robin.useSuperheroPower(); // 这有效!输出: 罗宾 借用力量: 体操 内部使用 体操

在这里,Sidekick 可以访问 Superheroprotected 成员,但我们不能直接从外部访问它们。

总结

就这样,我的编程学徒们!我们已经探索了 TypeScript 访问修饰符的秘密世界。记住:

  1. public 是对所有人开放的(就像一个公园)
  2. private 只对类本身开放(就像你的个人日记)
  3. protected 对类及其子类开放(就像家庭秘密)

明智地使用这些修饰符将帮助你创建更安全、更有组织、更易于维护的代码。就像成为编程世界的超级英雄一样——你知道何时分享你的力量,何时将它们隐藏起来!

当你练习这些概念时,想象你正在设计自己的超级英雄团队。谁知道什么?你如何保持团队合作和秘密身份之间的平衡?编程的乐趣就在于你可以做出这些激动人心的决定!

继续编码,继续学习,并记住:能力越大,责任越大……还有真的很酷的 TypeScript 类!??‍♂️?‍♀️

Credits: Image by storyset