Javascript &引用;获得;不起作用

Javascript &引用;获得;不起作用,javascript,get,getter,Javascript,Get,Getter,JavaScript控制台在第12行显示“意外标识符”时出错 get旨在在对象中调用,而不是在函数构造函数中调用。如果要将getFirst声明为User上的函数,则可以使用以下方法: var Jake = new User(); Jake.firstname = "Jake"; document.write(Jake.getFirst); 然后您还需要调用getFirst作为函数: function User() { this.firstname = null; this.getF

JavaScript控制台在第12行显示“意外标识符”时出错


get
旨在在对象中调用,而不是在函数构造函数中调用。如果要将
getFirst
声明为
User
上的函数,则可以使用以下方法:

var Jake = new User();
Jake.firstname = "Jake";
document.write(Jake.getFirst);
然后您还需要调用
getFirst
作为函数:

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

我认为问题在于,您使用的是函数
get
,而不是中概述的对象文本


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

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

alert(User.getFirst);
…但这不是您的
get
所在的位置

要在
get
所在的位置定义它,可以使用
defineProperty

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

foo.bar; // 42
注意:我称它为
first
,而不是
getFirst
,因为它是一个访问器函数,看起来像是直接属性访问,因此传统上不以动词形式命名:

function User() {
    this.firstname = null;

    Object.defineProperty(this, "first", {
        get: function() {
            return this.firstname;
        }
    });
}
如果要创建名为
getFirst
的函数,只需去掉
get
关键字:

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

我从未在javascript中见过get关键字。你用ActionScript编程了吗?这是一个getter,你可以在这里了解更多:你确定这些getter是在你试图使用它们的环境中实现的吗?@osnapizkindle:JavaScript自2009年以来就有一个可用的
get
关键字。对不起,我从未使用过它。顺便说一句,既然我们谈论的是“Java”脚本,那么Java编码风格可能更好,但这个问题是关于如何使它作为一个getter而不是一个函数工作。“getter”只是一个返回值的函数。在
对象中。defineProperty(
您可以编写
get
而不是
value
,它将按预期工作。尽管如此,它仍然会使用此代码返回
null
,因为
firstname
实际上没有被设置为
“Paul”
@Xufox:LOL,这一点很好。感谢您提供的
/
获取
捕获。
function User() {
    this.firstname = null;

    Object.defineProperty(this, "first", {
        get: function() {
            return this.firstname;
        }
    });
}
var u = new User();
u.firstname = "Paul";
u.first; // "Paul"
this.getFirst = function() {
    return firstname;
};
// ...
var u = new User();
u.firstname = "Paul";
u.getFirst(); // "Paul"