我有一个看起来像这样的课程
export default class {
constructor () {
this.store = {}
}
setX (x, y) {
this.store[x] = y
}
}
在获取未定义的值时,如何在this.store
上定义getter以返回0
?
让我举个例子:
setX('a', 1)
会将this.store['a']
设置为1
然后this.store['a']
会按预期返回1
。
但是this.store['b']
会返回undefined
,但我希望getter返回0
代替(并且可能会调用setX('b', 0)
,但还不确定)。
我知道我可以使用Object.defineProperty
来定义自定义getter,我只是不知道如何访问store
对象的任意尚未定义的属性。< / p>
这是完全可能还是我必须使用这样的解决方法?
getX (x) {
return this.store[x] || 0
}
我想避免这种情况,因为this.store[x]
看起来更清晰。
答案 0 :(得分:3)
在获得
var data = document.getElementsByClassName("aigjdd"); for (var i = 0; i < priceEls.length; i++) { var FinalData = data[i].innerText; alert(FinalData); }
值时,如何在this.store
上定义一个getter以返回0
?
除非您能够预测所有可能支持的属性名称并为其定义getter,否则您需要Proxy get
trap,这是ES2015的新版本(并且不能是polyfilled)。代理在性能方面很昂贵,只有在你真正需要时才使用它们。
示例:
undefined
当然,如果您将class Example {
constructor () {
this.store = new Proxy({}, {
get(target, property) {
return property in target ? target[property] : 0;
}
});
}
setX (x, y) {
this.store[x] = y;
}
}
const e = new Example();
console.log("Setting a");
e.setX("a", "foo");
console.log("a = " + e.store.a);
console.log("b = " + e.store.b);
设为私有,则只能通过对象上的store
方法强制执行访问,这样可以避免使用代理,但代价是{{1} }和getX
基于每个实例(目前,private data is coming):
setX