我尝试为Person
上定义的属性添加getter,因此我可以执行test.fullName
。问题是,当我记录test.fullName
时,它是未定义的。为什么吸气剂工作正常?
function Person(name, surname, yearOfBirth){
this.name = name,
this.surname = surname,
this.yearOfBirth = yearOfBirth };
Object.defineProperty(Person, 'fullName', {
get: function(){
return this.name +' '+ this.surname
}
});
var test = new Person("test", "test", 9999);
console.log(test.fullName);
答案 0 :(得分:5)
您必须在Person
的原型属性上定义属性,因此它会在所有实例上继承。
Object.defineProperty(Person.prototype, 'fullName', {
get: function() {
return this.name +' '+ this.surname
}
});
仅向Person
添加属性会使其成为静态。您必须在Person.prototype
上执行此操作。您可以在MDN了解更多信息。根据链接:
原型是JavaScript对象从中继承功能的机制
因此,要让所有Person
个实例继承所有属性,例如fullName
,请在Person.prototype
上定义属性。
此外,您使用逗号代替分号。使用分号终止语句,而不是逗号:
this.name = name;
this.surname = surname;
this.yearOfBirth = yearOfBirth;
答案 1 :(得分:4)
您在fullName
上定义了Person
属性。您应该在Person.prototype
上定义它,因此它由实例继承:
function Person(name, surname, yearOfBirth) {
this.name = name;
this.surname = surname;
this.yearOfBirth = yearOfBirth;
};
Object.defineProperty(Person.prototype, 'fullName', {
get: function() {
return this.name + ' ' + this.surname
}
});
var test = new Person("test", "test", 9999);
console.log(test.fullName);
旁注:请勿在逗号中使用分号,如Person
构造函数中所示。我已经解决了上述问题。
答案 2 :(得分:0)
在原型上定义它。
Object.defineProperty(Person.prototype, 'fullName', {
get() {
return `${this.name} ${this.surname}`;
}
});