Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript从匿名函数读取私有变量_Javascript_Variables_Private_Anonymous Function - Fatal编程技术网

JavaScript从匿名函数读取私有变量

JavaScript从匿名函数读取私有变量,javascript,variables,private,anonymous-function,Javascript,Variables,Private,Anonymous Function,我需要从匿名函数访问一个私有变量。此匿名函数由以下各项设置: coolObject = new (function(){ this.public = "public"; var private = "secrets"; // General functions here, no getter or setter for private })(); 我可以通过执行控制台.log(coolObject.public)或coolObject.public=“newValue

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

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

    // General functions here, no getter or setter for private
})();
我可以通过执行控制台.log(coolObject.public)或
coolObject.public=“newValue”
轻松地读写
coolObject.public
,但如何对私有变量执行相同的操作?另一件事是我不能向构造函数添加代码,
coolObject
最初总是这样定义的

总之,有没有一种方法可以从JavaScript中的匿名函数访问私有变量,如果有,如何访问


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

不更改现有代码是不可能的


正如您提到的,您不能更改代码,也不能读取私有变量。将变量设置为私有的原因是确保不能从作用域之外读取和写入它。如果这是可能的,那么私有变量的含义和原因就丢失了

如果不更改您拥有的代码,这是不可能的


正如您提到的,您不能更改代码,也不能读取私有变量。将变量设置为私有的原因是确保不能从作用域之外读取和写入它。如果这是可能的,那么私有变量的含义和原因就丢失了

没有对
coolObject
constructor进行任何更改-没有任何此类变量被称为“private”是有原因的。顺便说一句,函数是匿名的这一事实在这里并不重要。让它不是私有的吗?似乎是私有变量按预期工作的地方。没有对
coolObject
constructor进行任何更改-没有这样的变量被称为“private”是有原因的。顺便说一句,函数是匿名的这一事实在这里并不重要。让它不是私有的吗?似乎是一个私有变量按预期工作的地方。什么?人们总是为私有变量创建getter和setter。它绝不违反变量私有的原因。它被称为封装。@4castle-是的,但是从对象外部不能访问变量本身,只能调用getter和setter。(在这种情况下,OP说他们不能更改构造函数,所以他们不能添加getter或setter。)@nnnnnn我只是反对他们对私有变量的描述。在许多情况下,这样做不仅仅是为了限制对变量的访问,而是为了封装。这是“原因”和“定义”之间的区别。@4castle OP希望能够访问变量,而无需对其提供的代码进行任何更改。因此,给定这段代码,如果私有变量是可访问的,那么它违反了私有变量的用途。但是,是的,通过代码更改,它是可以做到的。什么?人们总是为私有变量创建getter和setter。它绝不违反变量私有的原因。它被称为封装。@4castle-是的,但是从对象外部不能访问变量本身,只能调用getter和setter。(在这种情况下,OP说他们不能更改构造函数,所以他们不能添加getter或setter。)@nnnnnn我只是反对他们对私有变量的描述。在许多情况下,这样做不仅仅是为了限制对变量的访问,而是为了封装。这是“原因”和“定义”之间的区别。@4castle OP希望能够访问变量,而无需对其提供的代码进行任何更改。因此,给定这段代码,如果私有变量是可访问的,那么它违反了私有变量的用途。但是,是的,通过代码更改,这是可以做到的。。