如何在JavaScript中"get"一个成员变量?

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);

get 旨在在对象内调用,而不是函数构造函数。如果您想将 getFirst 声明为 User 上的函数,那么您可以采用以下一种方法:

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

那么你还需要调用 getFirst 作为函数:

var Jake = new User();

Jake.firstname = "Jake";

document.write(Jake.getFirst());

我认为问题在于您将 get 与函数一起使用,而不是 documentation.

中概述的对象文字
var User = {
   firstName: 'Darren',
   get getFirst() { return this.firstName; }
}

alert(User.getFirst);

https://jsfiddle.net/ecao51n0/

这不是您用来定义 getter 的语法。您可以在对象 文字 中使用它,如下所示:

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

foo.bar; // 42

...但这不是你的 get 所在的位置。

要在 get 所在的位置定义它,您需要使用 defineProperty:

function User() {
    this.firstname = null;

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

注意我称它为 first,而不是 getFirst,因为它是一个访问函数,看起来像直接 属性 访问,因此传统上不在动词形式:

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

如果您想创建一个名为 getFirst 的函数,只需删除 get 关键字:

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