javascript - 构造函数中Object.defineProperty的获取中的"undefined"

标签 javascript constructor get set

我无法理解我在显示firstName 和lastName 方法的当前值的方式上犯了什么错误。现在,我在 jone.Name 和 jone.last 中遇到错误,因为它们得到 - 未定义。

function User(fullName) {
  this.fullName = fullName.split(' ');

  Object.defineProperty(this, 'firstName', {
    get: function() {
        this.firstName = this.fullName[0];
        return this.firstName;
    }
  });

  Object.defineProperty(this, 'lastName', {
    get: function() {
        this.lastName = this.fullName[1];
        return this.lastName;
    }   
  });

}

var jone= new User("Jone Coven");

console.log(jone.fullName);
console.log(jone.firstName);
console.log(jone.lastName);

最佳答案

问题在于 this.firstName = ...this.lastName = ... 覆盖已使用 Object.defineProperty 定义的属性(这个,...).

这是一个使用附加私有(private)属性 this._firstNamethis._lastName 的固定版本:

function User(fullName) {
  this.fullName = fullName.split(' ');

  Object.defineProperty(this, 'firstName', {
    get: function() {
        this._firstName = this.fullName[0]; // <------ _firstName
        return this._firstName;
    }
  });

  Object.defineProperty(this, 'lastName', {
    get: function() {
        this._lastName = this.fullName[1]; // <----- _lastName
        return this._lastName;
    }   
  });

}

var jone= new User("Jone Coven");

console.log(jone.fullName);
console.log(jone.firstName);
console.log(jone.lastName);
<小时/>

另一种解决方案是立即返回结果:

function User(fullName) {
  this.fullName = fullName.split(' ');

  Object.defineProperty(this, 'firstName', {
    get: function() {
        return this.fullName[0];
    }
  });

  Object.defineProperty(this, 'lastName', {
    get: function() {
        return this.fullName[1];
    }   
  });

}

var jone= new User("Jone Coven");

console.log(jone.fullName);
console.log(jone.firstName);
console.log(jone.lastName);
<小时/>

关于javascript - 构造函数中Object.defineProperty的获取中的"undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47940378/

相关文章:

java - Java对象工厂可以用作构造函数吗?

php - 使用 PHP 调用 URL 并获取 XML 响应

javascript - 当我单击搜索进行第二次搜索时,先前的搜索将被删除

javascript - meteor :铁路由的 url 参数问题

java - 调用构造函数后何时创建对象

c++ - 如何在工厂中为延迟实例化指定具体类/如何延迟构造函数调用

methods - 使用在 Stream 中返回 Int 的方法

php - 根据用户选择在页面上包含不同的 mysql 数据

javascript - 数据表 aaSorting 未按正确的列排序

javascript - 如何解析 JSON 响应中的第二个 HTML anchor 元素