【问题标题】:How do I "get" a member variable in JavaScript?如何在 JavaScript 中“获取”成员变量?
【发布时间】:2016-05-15 11:44:30
【问题描述】:
function User() {
    this.firstname = null;

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

JavaScript 控制台在第 12 行给我一个错误提示“Unexpected Identifier”

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

【问题讨论】:

  • 我从未见过 javascript 中的 get 关键字。你用 ActionScript 编程过吗?
  • 这是一个 getter,您可以在此处了解更多信息:developer.mozilla.org/en/docs/Web/JavaScript/Reference/…您确定这些 getter 是在您尝试使用它们的环境中实现的吗?
  • @osnapitzkindle:自 2009 年以来,JavaScript 就有一个有效的 get 关键字。
  • 对不起,我没用过。顺便说一句,既然我们在谈论“Java”脚本,也许 Java 编码风格更好

标签: javascript get getter


【解决方案1】:

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

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"

【讨论】:

  • Object.defineProperty(...) 中,您可以写get 而不是value,它会按预期工作。不过,它仍会使用此代码返回 null,因为 firstname 实际上并未设置为 "Paul"
  • @Xufox:大声笑,说得好。感谢value/get 的关注。
【解决方案2】:

我认为问题在于您将get 与函数一起使用,而不是documentation 中概述的对象文字。

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

alert(User.getFirst);

https://jsfiddle.net/ecao51n0/

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 但是这个问题是关于如何让它作为一个吸气剂而不是作为一个函数工作。
    • “getter”只是一个返回值的函数。
    猜你喜欢
    • 2011-05-26
    • 2011-09-20
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 2015-01-18
    • 2017-10-19
    • 1970-01-01
    相关资源
    最近更新 更多