Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getters and setters in javascript

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!

like image 917
martinvigo Avatar asked Apr 28 '12 00:04

martinvigo


People also ask

What are getters and setters in JavaScript?

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.

What is a getter in JavaScript?

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.

Do JavaScript classes need getters and setters?

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.

What are setters in JavaScript?

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.


2 Answers

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.

like image 71
Imp Avatar answered Nov 14 '22 09:11

Imp


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.

like image 32
BishopZ Avatar answered Nov 14 '22 09:11

BishopZ