function User() {
this.firstname = null;
get getFirst() {
return this.firstname;
}
}
JavaScript控制台在第12行显示“意外标识符”错误。
var Jake = new User();
Jake.firstname = "Jake";
document.write(Jake.getFirst);
function User() {
this.firstname = null;
get getFirst() {
return this.firstname;
}
}
var Jake = new User();
Jake.firstname = "Jake";
document.write(Jake.getFirst);
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"
。 - Sebastian Simonvalue
/get
的问题。 - T.J. Crowderget
方法不一致。请参考文档。var User = {
firstName: 'Darren',
get getFirst() { return this.firstName; }
}
alert(User.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());