Javascript 如何捕获父类';这';在ES6或更高版本中的子对象getter中?
下面是一个简单的JavaScript代码:Javascript 如何捕获父类';这';在ES6或更高版本中的子对象getter中?,javascript,ecmascript-6,Javascript,Ecmascript 6,下面是一个简单的JavaScript代码: class Test { constructor(val) { this._value = val; this.child = { get value() { return this._value; }, getValue: () => { return this._value; } }; } } let o = new Test(1); console.log(o.child.value
class Test {
constructor(val) {
this._value = val;
this.child = {
get value() { return this._value; },
getValue: () => { return this._value; }
};
}
}
let o = new Test(1);
console.log(o.child.value);
console.log(o.child.getValue());
输出:
undefined
1
在子对象child
中,我希望使getterget value()
生成与lambdagetValue()
相同的值,即正确捕获父对象的this
,并生成1
,而不是未定义的
在类
中是否有优雅的操作方法?或者我应该使用lambda并放弃getter
我或许可以这样做:
this.child = {
parent: this,
get value() { return this.parent._value; },
};
但是,我不想公开child.parent
,只想公开child.value
回答我自己,只需在构造函数中捕获此
即可:
class Test {
constructor(val) {
const self = this;
this._value = val;
this.child = {
get value() { return self._value; }
};
}
}
回答我自己,只需在构造函数中捕获这个即可:
class Test {
constructor(val) {
const self = this;
this._value = val;
this.child = {
get value() { return self._value; }
};
}
}
构造函数中定义了值
和子项
,并且值
应该是私有的,并且只能通过子项
访问。您可以将value
设置为闭包中的一个普通变量,并通过child
getter和setter访问它:
类测试{
构造函数(val){
设值=val;
此.child={
获取值(){return value;},
设置值(v){value=v;},
};
}
}
设o=新试验(1);
console.log(o.child.value);
o、 child.value=5;
console.log(o.child.value)
构造函数中定义了值
和子项
,并且值
应该是私有的,并且只能通过子项
访问。您可以将value
设置为闭包中的一个普通变量,并通过child
getter和setter访问它:
类测试{
构造函数(val){
设值=val;
此.child={
获取值(){return value;},
设置值(v){value=v;},
};
}
}
设o=新试验(1);
console.log(o.child.value);
o、 child.value=5;
console.log(o.child.value)代码>为什么要将子对象设置为泛型对象,而不是将父对象传递到的类对象?在这方面,为什么孩子要负责返回父母的价值观?这只是糟糕的代码设计。为什么要将子对象设置为泛型对象,而不是将父对象传递到的类对象?在这方面,为什么孩子要负责返回父母的价值观?这只是糟糕的代码设计。这是一个很好的答案,但我需要从测试
类的其他方法中访问这个值。也就是说,父类方法可以更改它,但是作为令牌传递到其他地方的子对象只能将其作为只读属性公开。如果子对象也可以设置值,则可以通过子对象访问它。如果没有,那么这对你就不起作用了。请参阅更新的答案。这是一个很好的答案,但我需要从测试
类的其他方法访问此值。也就是说,父类方法可以更改它,但是作为令牌传递到其他地方的子对象只能将其作为只读属性公开。如果子对象也可以设置值,则可以通过子对象访问它。如果没有,那么这对你就不起作用了。请参阅更新的答案。