user5808331
user5808331

Reputation:

How do I "get" a member variable in JavaScript?

function User() {
    this.firstname = null;

    get getFirst() {
        return this.firstname;
    }
}

JavaScript console gives me an error saying "Unexpected Identifier" on line 12

var Jake = new User();
Jake.firstname = "Jake";
document.write(Jake.getFirst);

Upvotes: 3

Views: 485

Answers (3)

T.J. Crowder
T.J. Crowder

Reputation: 1075785

That's just not the syntax you use to define a getter. You'd use it in an object literal, like this:

var foo = {
    get bar() {
        return 42;
    }
};

foo.bar; // 42

...but that's not where your get is.

To define it where your get is, you'd use defineProperty:

function User() {
    this.firstname = null;

    Object.defineProperty(this, "first", {
        get: function() {
            return this.firstname;
        }
    });
}

Note I called it first, not getFirst, because it's an accessor function, which looks like a direct property access, and so is traditionally not given a name in a verb form:

var u = new User();
u.firstname = "Paul";
u.first; // "Paul"

If you wanted to create a function called getFirst, just get rid of the get keyword:

this.getFirst = function() {
    return firstname;
};
// ...
var u = new User();
u.firstname = "Paul";
u.getFirst(); // "Paul"

Upvotes: 8

Darren
Darren

Reputation: 70806

I believe the issue is that you are using get with a function rather than the object literal as outlined in the documentation.

var User = {
   firstName: 'Darren',
   get getFirst() { return this.firstName; }
}

alert(User.getFirst);

https://jsfiddle.net/ecao51n0/

Upvotes: 2

Anthony E
Anthony E

Reputation: 11245

get is intended to be called within an object, not a function constructor. If you want to declare getFirst as a function on User, then here's one way you could do it:

function User() {
   this.firstname = null;
   this.getFirst = function() {
      return this.firstname;
   }
}

Then you would also need to call getFirst as a function:

var Jake = new User();

Jake.firstname = "Jake";

document.write(Jake.getFirst());

Upvotes: 0

Related Questions