我想访问一个类变量。但在构造函数中分配数据。 例如:
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/