javascript - JavaScript 中真的没有私有变量吗?
问题描述
私有变量是只对它们所属的类可见的变量。普遍认为 JS 中没有严格的私有变量(除了 this.#property 这样的新字段)。谁能解释一下为什么不能将下面的变量“男孩”视为私有变量?
class Forrest {
constructor() {
let boy = "Bobby"
this.getBoy = function() {
console.log(boy)
}
}
}
const f = new Forrest()
f.getBoy() // Bobby
解决方案
我还没有听到有人声称boy
在您的示例中不是私有的。恰恰相反,它是构造函数私有的,并且getBoy
. 没有其他东西(包括该类中的其他东西)可以访问它。但无论哪种方式,我认为这可能是在“基于意见”的领域。
走出那个领域:不管有人对问题中显示的闭包方法有什么感觉,JavaScript很快就会拥有真正的私有字段。它已在大多数主要引擎中实施,并可能在今年达到规范。您的私有字段示例如下所示:
class Forrest {
#boy = "Bobby";
getBoy() {
console.log(this.#boy);
}
}
const f = new Forrest();
f.getBoy() // Bobby
或者,如果我们从构造函数参数中设置它:
class Forrest {
#boy;
constructor(boy) {
this.#boy = boy;
}
getBoy() {
console.log(this.#boy);
}
}
const f = new Forrest("Bobby");
f.getBoy() // Bobby
这些将在基于 Chromium 的浏览器的最新版本上运行。Safari 和 Firefox 不会再长了。
推荐阅读
- batch-file - CeRun.exe 未在 WinCE 上启动批处理文件
- ios - 如何检查 Swift 的子类中使用了哪个 ViewController
- c# - 如何使用 FileStream 将 zip 文件复制到远程服务器位置?
- html - 打印时设置默认比例
- angular - Angular 2 在表单中添加动态字段并将数据保存到数据库
- reactjs - 在反应 jsx 元素数组值中添加新行
- ios - 在没有 ssl 证书的 WebView 中打开 Https URL
- ios - Appium 测试甚至没有在 AWS DeviceFarm 上开始
- typescript - Typescript 'keyof' 关键字在使用 react setState 函数时出错
- ios - 从 NSObject 类创建一个数组