Javascript 如何在不使用特权成员的情况下在公共函数中访问私有变量?

Javascript 如何在不使用特权成员的情况下在公共函数中访问私有变量?,javascript,variables,prototype,private,Javascript,Variables,Prototype,Private,我有一个变量和一个函数 var a=[]; function b(){} 我想让它们在构造函数及其原型中可以访问 function Fnctn() { //a and b is accessible here } Fnctn.prototype={ one:function() { //a and b is accessible here }, two:function() { //a and b is acces

我有一个变量和一个函数

var a=[];
function b(){}
我想让它们在构造函数及其原型中可以访问

function Fnctn()
{
    //a and b is accessible here
}
Fnctn.prototype={
    one:function()
    {
        //a and b is accessible here
    },
    two:function()
    {
        //a and b is accessible here
    },
    …
    n:function()
    {
        //a and b is accessible here
    }
}
//a and b is not accessible to the user
我发现的第一个解决方案是在构造函数中使用特权成员

function Fnctn()
{
    var a=[];
    function b(){}
    this.a=a;
    this.b=b;
}
现在a和b在原型中可以通过this.a和this.b访问,但是用户也可以访问它们。 我找到的第二个解决方案是

function Fnctn()
{
    var a=[];
    function b(){}
    //a and b is accessible here
    this.one=function()
    {
        //a and b is accessible here
    };
    this.two=function()
    {
        //a and b is accessible here
    };
    …
    this.n=function()
    {
        //a and b is accessible here
    };
}
//a and b is not accessible to the user
这个解决方案满足了我的要求,但正如上面所说的,它需要更多的内存和时间。因此,这两种解决方案并不合适。 那么,我该怎么做呢? 重新表述问题:我想知道是否有其他方法(如果是,那么是什么)可以做到这一点,或者这是唯一的方法? 我想知道第三种方法是否可行


注意:var a不限于数组。它可以是任何东西(字符串、数字等)。

比什么更多的内存和时间?多少钱$10美元比9美元还贵,但对于法拉利来说很便宜实施您的解决方案,使其具有您需要的功能。然后,如果您有内存或存储问题,请采取措施。否则,请满意您所拥有的(即避免过早优化)。我也很确定您不想通过prototype共享
[]
,因为它的行为类似于静态变量(在面向类的语言中是静态的)。您似乎知道如何做,但不想使用您引用的文章中显示的方案。你就是这样做的。没有其他神奇的方法。要么接受这种设计,要么不接受这种设计的任何后果。就连这篇文章的作者也说,“考虑到现代PC,不一定非常[内存和时间],但也有一些。”毫无疑问,这种方法使用了更多的内存(一些小的,很可能是微不足道的更大的内存),但我看不出它是如何使用更多的时间的。作者没有详细阐述“时间”方面。如果有什么不同的话,它应该更快,因为原型不需要遍历。不过,这种差异可能很小,除非您正在构建一百万个这样的对象。还有什么选择呢?