2016-05-16 40 views
0

我需要从匿名函数中访问私有变量。该匿名函数由以下设置:JavaScript从匿名函数中读取私有变量

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;};创建getters和setters,但那不起作用。

+4

没有对'coolObject'构造函数进行任何更改 - 否 – dotnetom

+2

由于某种原因,此类变量被称为“private”。顺便说一句,这个函数是匿名的这个事实在这里是无关紧要的。 – nnnnnn

+1

是不是私人?似乎是一个私人变量的目标是在那里按预期工作。 – Spaceman

回答

2

这是不可能的,不改变你有的代码。

正如你所说的,你不能改变代码,你不能读取私有变量。将变为专用的原因是为了确保您不能从范围之外读取和写入它。如果可能的话,私有变量的含义和原因就会丢失。

+0

什么?人们总是创建getter和setter来私有变量。它绝不会违反变量为私有的原因。它被称为**封装**。 – 4castle

+0

@ 4castle - 是的,但是从对象外部你不能访问变量本身,你所能做的就是调用getter和setter。 (在这种情况下,OP说他们不能改变构造函数,所以他们不能添加getter或setter。) – nnnnnn

+0

@nnnnnn我只是反对他们对私有变量的描述。在许多情况下,它不是简单地限制对变量的访问,而是为了封装而完成的。这是“理性”和“定义”之间的区别。 – 4castle