gpt4 book ai didi

javascript - Typescript 中的私有(private)公共(public)

转载 作者:行者123 更新时间:2023-11-28 18:29:06 26 4
gpt4 key购买 nike

这里是 typescript 代码和生成的相应 JavaScript。为什么微软选择使用 this.greeting 而不是使用 var 并在生成的 js 代码中隐藏变量以防止外部访问?在 typescript 中将属性更改为 private 只会引发编译错误,但生成的 js 代码是同上

//typescript code
class Greeter {
greeting: string; //why is this not private by default???
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}

let greeter = new Greeter("world");
console.log(greeter.greeting); //why the heck is 'greeting accessible'

//Generated javascript as follows
var Greeter = (function () {
function Greeter(message) {
this.greeting = message; //this should have been a var ????
}
Greeter.prototype.greet = function () {
return "Hello, " + this.greeting;
};
return Greeter;
}());
var greeter = new Greeter("world");
console.log(greeter.greeting); //why the heck is 'greeting accessible'

最佳答案

早期围绕 private 关键字进行了大量讨论。 TypeScript 团队考虑了在非常大的应用程序中这样做的性能成本,他们认为这太大了。

虽然在许多应用程序中性能成本可以忽略不计,但在某些情况下,TypeScript 用于构建数百万个 LOC 应用程序,并且如果编译的 JavaScript 实际上会阻止它们使用 private 变量试图隐藏变量。

The problem with using constructor function local variables for private storage is that they can't be accessed from functions on the prototype object (which is what methods on a class become in the generated JavaScript). Instead you need to create local function objects and that consumes a lot more memory

您可以在原始 TypeScript Codeplex site 上看到我对您的问题的版本(以及 Anders 的 Hejlsberg 的回答)。

关于javascript - Typescript 中的私有(private)公共(public),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38489697/

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