访问类变量

新手上路,请多包涵

我想访问一个类变量。但是在构造函数中分配数据。前任:

 class Student {
    constructor(data) {
       this.data = data;
       this.extraVariable = "Value"
    }

    getData() {
       return this.data
    }
}

var s = new Student({name: 'Abcd', subject: 'Javascript'});

s.name = 'Xyz';  // i want to access name using s.name not s.data.name

// i want to get updated data by calling this
s.getData() // it return { name: 'Xyz', subject: 'Javascript' }

在此类中,在构造函数或 setData 方法中分配数据,但我想直接访问这些数据而无需 this.data.variableName。当我调用 getData 方法时,我只想获取那些数据,而不是其他类变量

注意:成员不应固定名称和主题。如果我想添加更多成员,我不想创建 getName 和 setName 方法,因为成员不固定

原文由 Deep Patel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 251
1 个回答

正如@Hammerbot 已经暗示的那样,您可以遍历对象并将每个属性应用于当前实例:

 class Student {
  constructor(data) {
    this.data = data;
    this.extraVariable = "Value";

    // Assign each property of the object directly to the instance
    Object.keys(data).forEach((key) => {
      this[key] = data[key];
    });
  }

  getData() {
    return this.data
  }
}

var s = new Student({name: 'Abcd', subject: 'Javascript'});

s.name = 'Xyz';

console.log(s.name);

原始答案:创建 getter 和 setter

您可以在 name 的类上添加 getter 和 setter。这些 getter 和 setter 将引用 this.data.name ,但将提供您正在寻找的交互:

 class Student {
  constructor(data) {
    this.data = data;
    this.extraVariable = "Value"
  }

  getData() {
    return this.data
  }

  get name() {
    return this.data.name;
  }

  set name(name) {
    this.data.name = name;
  }
}

var s = new Student({name: 'Abcd', subject: 'Javascript'});

s.name = 'Xyz';

console.log(s.name);

原文由 KevBot 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题