gpt4 book ai didi

javascript - TypeScript 中封装的工作原理

转载 作者:行者123 更新时间:2023-11-28 14:24:58 27 4
gpt4 key购买 nike

我试图理解封装在 Typescript 中是如何工作的,并提出了一个例子,这让我很困惑为什么我能够访问甚至直接更改某个类的私有(private)成员。

class Encapsulate {
str:string = "hello"
private str2:string = "world"
}

var obj = new Encapsulate();
console.log(obj.str); //accessible
obj.str2 = "something else";
console.log(obj.str2); //compilation Error as str2 is private

输出:你好,还有其他事情

我收到编译时警告,例如编译错误,因为 str2 是私有(private)的,但我仍然可以更改它或访问它。我是否缺少封装的一般概念,它是什么以及它如何在 Typescript 上工作。

最佳答案

问题是 typeScript 只是编译为 javaScript,但它没有运行时。

TypeScript 在编译类型上向您发出这些警告。它告诉你:

Ey, Encapsulate str2 is private, and you're still trying to access it. You shouldn't do that.

但是,一旦 ts 编译并生成 js 代码,所有的 typescript 注释都会在代码中丢失。 JavaScript 不知道有关 privateenuminterfaces 的任何信息。一旦您的代码被编译并在浏览器或任何其他 js 运行时中运行,您将拥有一个包含两个字段 str1Encapsulate javaScript 对象> 和 str2。它们不能是 privatepublic 因为 js 不知道这一点。 Encapsulate 将是一个普通的裸 JavaScript 对象。

所以,基本上,typeScript 可以帮助您在编译时捕获错误。但是,一旦代码编译,它将“忘记”有关 typeScript 注释的所有内容。

它可以告诉您不应访问 str2。如果发现这样的错误,它甚至可以拒绝编译(这取决于 tsconfig 配置)。但编译后的代码与 typescript 没有任何关系。

关于javascript - TypeScript 中封装的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53742850/

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