首页 > 解决方案 > JavaScript 中真的没有私有变量吗?

问题描述

私有变量是只对它们所属的类可见的变量。普遍认为 JS 中没有严格的私有变量(除了 this.#property 这样的新字段)。谁能解释一下为什么不能将下面的变量“男孩”视为私有变量?

class Forrest {
  constructor() {
    let boy = "Bobby"
    this.getBoy = function() {
      console.log(boy)
    }
  }
}

const f = new Forrest()
f.getBoy() // Bobby

标签: javascriptoopes6-class

解决方案


我还没有听到有人声称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 不会再长了。


推荐阅读