如何在 JavaScript 中“获取”成员变量

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

本文关键字:获取 成员 变量 JavaScript      更新时间:2023-09-26
function User() {
    this.firstname = null;
    get getFirst() {
        return this.firstname;
    }
}

JavaScript 控制台在第 12 行给我一个错误,说"意外标识符">

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

这不是你用来定义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"
我相信

问题是您将get与函数一起使用,而不是文档中概述的对象文字。

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

https://jsfiddle.net/ecao51n0/

get旨在

在对象中调用,而不是函数构造函数。如果你想在User上将getFirst声明为一个函数,那么这里有一种方法可以做到这一点:

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

然后,您还需要将getFirst作为函数调用:

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