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!
Getter — binds an object property to a function that will be called when that property is looked up. Setter — binds an object property to a function to be called when there is an attempt to set that property.
Getters give you a way to define a property of an object, but they do not calculate the property's value until it is accessed. A getter defers the cost of calculating the value until the value is needed.
Classes allow using getters and setters. It is smart to use getters and setters for the properties, especially if you want to do something special with the value before returning them, or before you set them. To add getters and setters in the class, use the get and set keywords.
In JavaScript, a setter can be used to execute a function whenever a specified property is attempted to be changed. Setters are most often used in conjunction with getters to create a type of pseudo-property. It is not possible to simultaneously have a setter on a property that holds an actual value.
You can use closure to hide the variable.
function MyClass {
var value;
this.getValue = function() {
return value;
}
this.setValue = function(val) {
value = val;
}
}
After the constructor MyClass
finishes, the value
field is unacessible, as it was scoped only to this constructor (function). So we may say that value
is a private field. However, the methods getValue()
and setValue()
are publicly accessible from the constructed object and they keep reference to the variable scope of MyClass
, thus they can still manipulate value
.
Using closures:
(function(exports){
exports.field = {};
var _value = '123';
exports.field.get = function(){
return _value;
}
exports.field.set = function(val){
_value = val;
}
})(window);
console.log(field.get());
Here is a good tutorial on closures in JS.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With