"获取"不工作

时间:2016-05-15 11:44:30

标签: javascript get getter

function User() {
    this.firstname = null;

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

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

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

3 个答案:

答案 0 :(得分:9)

这不是您用来定义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"

答案 1 :(得分:2)

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

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

alert(User.getFirst);

https://jsfiddle.net/ecao51n0/

答案 2 :(得分:0)

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