gpt4 book ai didi

javascript - 用 TypeScript 编写的具有 protected /私有(private)字段的类可以从 JavaScript 中的类外部访问吗?

转载 作者:行者123 更新时间:2023-11-28 14:31:13 25 4
gpt4 key购买 nike

我目前正在学习 TypeScript 类(class)(而且我在 OOP 方面没有太多经验)。

下面的代码片段来自https://www.typescriptlang.org/docs/handbook/classes.html中的类章节。

事情是这样的:

我知道它不应该能够直接访问 protected 属性“name”,如 console.log(howard.name) 中所示,并且我知道应该可以通过以下方式访问它:派生类的方法。

当我在 TypeScript 上编译它时,我确实收到了一条错误消息。但事实是,当我在浏览器上打开生成的 JS 文件(已编译)时,我可以在控制台中看到输出,就像它是公共(public)属性一样。

这在 OOP 中正常吗?如果在 JS 编译文件中无论如何都可以访问它们,为什么还要在 TypeScript 中创建具有 protected /私有(private)属性的类呢?

class Person {
protected name: string;
constructor(name: string) { this.name = name; }
}

class Employee extends Person {
private department: string;

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

public getElevatorPitch() {
return `Hello, my name is ${this.name} and I work in ${this.department}.`;
}
}

let howard = new Employee("Howard", "Sales");
console.log(howard.getElevatorPitch());
console.log(howard.name); // error

最佳答案

可见性修饰符(protectedprivate)不是为了“安全”或“隐藏”任何内容。它不会保护数据不被访问。它的作用是为您的类/对象建立安全的接口(interface)。如果您将某些内容分类为public,则意味着可以针对该属性编写其他代码。这意味着属性将来最好不要改变,否则您将面临破坏其他代码的风险。 protectedprivate 属性在使用位置方面受到更多限制,这可以更好地保证更改它们时会破坏哪些内容以及谁会弄乱它们值。

Javascript本身没有任何可见性修饰符的概念,它在Javascript中都是public。这些仅在 Typescript 编译时强制执行,此时如果您违反了自己的契约(Contract),您将收到通知。但该检查在运行时不存在。

关于javascript - 用 TypeScript 编写的具有 protected /私有(private)字段的类可以从 JavaScript 中的类外部访问吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51501882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com