我想从getter中调用setter来初始化默认值,而不需要重复设置逻辑。
我确实想出了一个使用 getOwnPropertyDescriptor 的解决方案:
var o = {
set p(val) {
// setting logic
alert(val);
this.pval = val;
},
get p() {
if (!this.pval) {
const psetter = Object.getOwnPropertyDescriptor(this, 'p').set.bind(this);
psetter(10); // default to 10
}
return this.pval;
}
}
alert(o.p);
但是这看起来很复杂..有更简单的方法吗?
最佳答案
看来你可以从此简化你的 setter/getter :
get p() {
if (!this.pval) {
const psetter = Object.getOwnPropertyDescriptor(this, 'p').set.bind(this);
psetter(10); // default to 10
}
return this.pval;
}
对此:
get p() {
if (!this.pval) {
this.p = 10; // trigger setter to set default val
}
return this.pval;
}
<小时/>
如果默认值不必由 setter 计算并且可以在对象初始化时知道,那么在以下情况下将 pval
属性初始化为适当的默认值会更简单您首先在声明时(如果它是静态对象)或在构造函数中(如果您使用工厂函数或类)创建该对象。然后,您不必从 getter 调用 setter,因为默认值已经设置。确保初始化默认值的另一种方法如下所示:
var o = {
set p(val) {
// setting logic
this.pval = val;
},
get p() {
return this.pval;
},
pval: 10 // initialize default value
}
<小时/>
附注如果 0
是 p
的合法值,那么您需要将 if (this.pval)
更改为 if (this.pval) 。 pval === 未定义)
。
关于Javascript 从 getter 调用 setter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48633251/