How to create private variable in a javascript class

Private variables aren't really available on javascript classes, at least not last time I checked (June 2020). And you really probably shouldn't do this, because it's extremely hacky, uses eval in runtime code, and uhh... That's bad, right?

Anyway, it seemed like a lot of fun to figure out, so I did! And this is what we have.

It's been awhile since I made this, so it's possible the private variables don't work across different functions of the class... But I think they do?

The Test Class

  
class Expose {  
  
    //prefix the function with N_ to specify that we want to use private variables  
    // the function using the private field will be renamed without the prefix  
    static N_a(aparam,paramTwo){  
        alert(aparam);  
        alert(paramTwo)  
        //make sure we stay in the class  
        alert(this.verify);  
        //these next two will be private.  
        alert(privateField);  
        alert(privTwo);  
    }  
    static change(key,func){  
        this[key] = func;  
    }  
}  
Expose.verify = "cats";  

The function to create private fields

function exposeVar(obj,key,bindArgs){  
    const exposeVar = function(obj,key,bindArgs){  
            const slicedArgs = Array.prototype.slice.call(arguments,3);  
            const func = obj['N_'+key];  
            // const theValue = privateValue;  
            for (const bindKey in bindArgs){  
                eval('var '+bindKey+'= bindArgs[bindKey];');  
            }  
            const g = "(function "+func.toString()+").apply(this,slicedArgs)();";  
            alert(g);  
            eval(g);  
        }.bind(obj,obj,key,bindArgs);  
    obj[key] = exposeVar;  
    return exposeVar;  
}  

Using the private field creator

// add privateField & privTwo to the 'a' function.  
const exposedFunc = exposeVar(Expose,'a',{'privateField':'first private field','privTwo': "Another pviate field"});  
Expose.a('got that bound',"another paramater");  
//basically, do exposeVar() for every method of the class (or prototype) that starts with N_