介绍
为了获取类实例的属性,我们可以使用Object.getOwnPropertyNames()
以下示例中的方法
class People {
constructor(name, age) {
this.name = name;
this.age = age;
}
getProperties() {
return Object.getOwnPropertyNames(this);
}
}
console.log(new People("John", 20).getProperties())
这确实有效,因为对象的属性是public。但如果对象的属性是私有的,则此方法不起作用。
问题
想象一下,您不希望用户直接在类方法之外修改name
andage
属性,因此您将它们设为私有。但是,您还希望有一种方法可以在另一个实例中复制一个实例。由于不适用于私有属性,因此您无法访问密钥以使:Object.getOwnPropertyNames()
clone()
class People {
#name; #age;
constructor(name, age) {
this.#name = name;
this.#age = age;
}
clone(o) {
Object.getOwnPropertyNames(this).forEach(key => this[key] = o[key]);
}
getName() { return this.#name }
}
p1 = new People("John", 20);
p2 = new People("", 0);
p2.clone(p1); // Now p2 should have the same properties of p1
console.log(p2.getName()); // Prints "" and should print "John"
问题
有没有办法从类方法内部访问类的私有属性名称?