TypeScript - 访问修饰符:代码隐私的友好指南
你好,未来的编程超级巨星!? 我很兴奋能成为你探索 TypeScript 访问修饰符这个激动人心旅程的向导。作为一个教编程多年的老师,我可以告诉你,理解这些概念就像学习编程世界的秘密握手。那么,让我们一起来揭开这些谜团吧!
访问修饰符是什么?
在我们具体探讨之前,让我们先聊聊访问修饰符是什么。想象你正在建造一个超级酷的树屋(这就是我们的代码!)。访问修饰符就像你设定的规则,决定谁能爬上去,谁能窥视里面,谁能使用秘密隔间。它们帮助我们控制代码的哪些部分可以被访问和使用。
在 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(); // 输出: 蜘蛛侠 使用了 射网!
在这个例子中,name
、power
和 usePower()
都是公共的。我们可以在代码的任何地方访问和使用它们。就像蜘蛛侠在城中自由穿梭一样!
私有访问修饰符
现在,让我们来谈谈 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
可以访问 Superhero
的 protected
成员,但我们不能直接从外部访问它们。
总结
就这样,我的编程学徒们!我们已经探索了 TypeScript 访问修饰符的秘密世界。记住:
-
public
是对所有人开放的(就像一个公园) -
private
只对类本身开放(就像你的个人日记) -
protected
对类及其子类开放(就像家庭秘密)
明智地使用这些修饰符将帮助你创建更安全、更有组织、更易于维护的代码。就像成为编程世界的超级英雄一样——你知道何时分享你的力量,何时将它们隐藏起来!
当你练习这些概念时,想象你正在设计自己的超级英雄团队。谁知道什么?你如何保持团队合作和秘密身份之间的平衡?编程的乐趣就在于你可以做出这些激动人心的决定!
继续编码,继续学习,并记住:能力越大,责任越大……还有真的很酷的 TypeScript 类!??♂️?♀️
Credits: Image by storyset