Javascript类返回私有变量而不是getter
我希望下面类的实例同时返回“private”变量及其getter,但getter变量根本不返回。为什么?Javascript类返回私有变量而不是getter,javascript,Javascript,我希望下面类的实例同时返回“private”变量及其getter,但getter变量根本不返回。为什么? class Foo { _myPrivateVar = null; get myPublicVar() { return this._myPrivateVar; } set myPublicVar(v) { if (v > 4) { this._myPrivateVar = v; } } } const f = new Fo
class Foo {
_myPrivateVar = null;
get myPublicVar() {
return this._myPrivateVar;
}
set myPublicVar(v) {
if (v > 4) {
this._myPrivateVar = v;
}
}
}
const f = new Foo();
console.log(f) // Foo { _myPrivateVar: 5 }
我期望
{u myPrivateVar:5,myPublicVar:5}
。我知道我可以直接访问f.myPublicVar
,但问题是当从Express服务器返回实例时,例如,生成的JSON对象没有getter属性myPublicVar
。为什么?getter和setter在原型上,而\u myPrivateVar
放在实例本身上
当使用JSON.stringify
对对象进行序列化时(例如通过网络传输),生成的JSON中只包含可枚举的自身属性:
constobj=Object.create({foo:'foo'});
obj.bar=‘bar’;
log(JSON.stringify(obj))代码>
属性名称未放置在User.prototype中。相反,它是在调用构造函数之前由new创建的,它是对象本身的一个属性
类用户{
name=“匿名”;
(){
log(`Hello,${this.name}!`);
}
}
新用户().sayHi();
console.log('sayHi:',User.prototype.sayHi);//放置在User.prototype中
console.log('name:',User.prototype.name);//未定义,未放置在User.prototype中
getter/setter位于原型上,而不是实例上(且具有可枚举性:false)。