I am starting with javascript and specially with the OOP pattern.
My question is simple. In a setter, is there a way to keep the same name for the parameter and the private class variable? I have looked everywhere but couldn’t find anyone mentioning it, just examples with different var names. I am very picky with my code and I have having to give it two different names.
Taking the example from http://ejohn.org/blog/javascript-getters-and-setters/
function Field(val){
this.value = val;
}
Field.prototype = {
get value(){
return this._value;
},
set value(val){
this._value = val;
}
};
you can see in the setter the parameter is val but the property is actually value. Since it is javascript I cannot simply do this.value=value because “this” would make it public. value=value would refer both to the parameter (and would be very weird). Is there really no way to do this? If not, is there any “best practice” for this situation? I guess underscore could be valid but I am just picky so just want to make sure there is no other way.
Thank you!
You can use closure to hide the variable.
After the constructor
MyClassfinishes, thevaluefield is unacessible, as it was scoped only to this constructor (function). So we may say thatvalueis a private field. However, the methodsgetValue()andsetValue()are publicly accessible from the constructed object and they keep reference to the variable scope ofMyClass, thus they can still manipulatevalue.