【问题标题】:Which access modifiers are implied when not specified?未指定时隐含哪些访问修饰符?
【发布时间】:2014-01-08 22:06:01
【问题描述】:

对于支持访问修饰符的所有不同概念,例如字段、属性、方法和类,如果未指定,哪些访问修饰符是隐含的?

【问题讨论】:

  • @basarat,我已经很久没有使用 TypeScript 了,所以现在很难记住它是如何工作的!据我记得,你的回答看起来很合理,但我觉得它的权威性不足以让我将其标记为正确。您的答案是基于您对语言的经验,还是来自规范中的信息?
  • 为了澄清这个问题和答案,应该在问题中指定typescript以使其清楚。有一个 typescript 标签,但这是我们不讨论 scala、java、C#、C++ 的唯一指示。

标签: typescript access-modifiers


【解决方案1】:

如果未指定,class 中的所有内容都是 publicmodule 中的所有内容都是私有的,除非使用了 export 关键字。

【讨论】:

  • 适合使用入门工具包的人。其中一些随 tslint 一起提供,它会变得非常混乱。当您看到此消息时default access modifier on member/method not allowed 检查tslint.json 以允许默认或隐含的访问修饰符。
  • 是否可以使用预转译步骤自动分配private
【解决方案2】:

我不同意

如果没有指定,类中的所有内容都是公开的。

一切都是公开的,即使使用的是私有的。只看转译的代码。私有注释方法将公开可用。只有转译会抛出错误。公共和私有都将转换为<Object>.prototype.funcName

【讨论】:

  • 是的,这是一个很好的观点。但是,我的问题是which access modifiers are implied when not specified 而不是can my code be accessed when an access modifier is not specified。访问修饰符是一个 TypeScript 概念,而不是一个 JavaScript 概念。所以我认为@basarat 的回答解决了我在问题中的意思,并且在问题的上下文中似乎是正确的。也许有一些空间可以消除问题和答案中的措辞。
  • 这就是 TS 的工作原理,无论从 TS 的角度来看它是否“正确”,它都会编译你的代码,这意味着 TS 中的所有内容,类也不例外,但重点是如果你尊重 TS 警告 - 您不会访问标记为私有的属性。
  • 我想不出任何语言实际上是私有的。在 C# 中,您可以轻松通过反射获得任何私有字段。在 C 或 C++ 等低级语言中,您可以通过移动指针来访问私有字段。缺少操作系统级别的保护措施,如 DEP 和加密内存,访问修饰符只是编译器提供的帮助,可帮助您编写更好的代码。 ...对吗?
  • @pbarranis private JavaScript fields 实际上是私有的,无法从 JavaScript 运行时访问它们。
猜你喜欢
  • 2018-04-18
  • 2014-11-03
  • 2011-10-15
  • 2017-03-07
  • 2021-04-11
  • 2017-08-18
  • 2013-05-25
  • 2015-04-09
  • 1970-01-01
相关资源
最近更新 更多