javascript - 访问类变量

标签 javascript

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

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 方法,因为成员不固定

最佳答案

正如@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);

关于javascript - 访问类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49240485/

相关文章:

javascript - 选择文本时如何停止浏览器滚动?潜在的浏览器错误?

javascript - JSDoc 中的文档重载函数

javascript - 如何在Jquery中的点击事件期间停止滚动

javascript - 在 Canvas 中拖动图像并调整其大小(移动设备)

javascript - 如何在分配变量时使用 async/await?

javascript - 注入(inject)并播放html5视频而不闪烁

javascript - 事件不限

javascript - 如果描述采用默认大小,如何禁用“阅读更多”链接

javascript - 按索引或数据属性分类

javascript - 2 Xeditable Angular Directive(指令)上的取消按钮