【问题标题】:JavaScript read private variable from anonymous function [duplicate]JavaScript从匿名函数中读取私有变量[重复]
【发布时间】:2025-12-10 11:25:02
【问题描述】:

我需要从匿名函数访问私有变量。此匿名函数由以下设置:

coolObject = new (function(){
    this.public = "public";
    var private = "secrets";

    // General functions here, no getter or setter for private
})();

我可以通过console.log(coolObject.public)coolObject.public = "newValue" 轻松读取和写入coolObject.public,但是如何对私有变量执行相同操作?另一件事是我无法向构造函数添加代码,coolObject 最初总是这样定义的。

那么,总而言之,有没有一种方法可以让我从 JavaScript 中的匿名函数访问私有变量,如果可以,如何访问?

编辑:我尝试通过 coolObject.getPrivate = function(){return private;}; 创建 getter 和 setter,但这不起作用。

【问题讨论】:

  • coolObject 构造函数没有任何更改 - 没有
  • 这样的变量被称为“私有”是有原因的。顺便说一句,函数是匿名的这一事实在这里无关紧要。
  • 不设为私有?似乎是私有变量的要点在那里按预期工作。

标签: javascript variables private anonymous-function


【解决方案1】:

不更改您拥有的代码是不可能的。

正如您所提到的,您无法更改代码,您无法读取私有变量。将变量设为私有的原因是为了确保您无法从范围之外对其进行读写。如果这一切都是可能的,那么私有变量的意义和原因就丢失了。

【讨论】:

  • 什么?人们一直在为私有变量创建 getter 和 setter。它绝不违反变量是私有的原因。它被称为封装
  • @4castle - 是的,但是从对象外部您无法访问变量本身,您所能做的就是调用 getter 和 setter。 (在这种情况下,OP 说他们不能更改构造函数,所以他们不能添加 getter 或 setter。)
  • @nnnnnn 我只是反对他们对私有变量的描述。在许多情况下,它不仅仅是为了限制对变量的访问,而是为了封装。这是“原因”和“定义”的区别。
  • @4castle OP 希望能够在不对他提供的代码进行任何更改的情况下访问该变量。因此,如果这段代码完全可以访问私有变量,那么它就违反了私有变量的目的。但是可以通过代码更改来完成..