为什么房产没有这个吸气剂?

时间:2017-03-27 16:18:07

标签: javascript getter

我尝试为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);

3 个答案:

答案 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}`;
    }
});