返回一个适合对象
的任意属性我有一个类,看起来像这样返回一个适合对象
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
,但我想,吸气返回0
代替(也许叫setX('b', 0)
,目前还不能确定)。
我知道我可以用Object.defineProperty
来定义一个自定义的getter,我只是无法围绕如何访问store
对象的一个任意的,尚未定义的属性。
这是所有可能的还是我必须使用这样的解决方法?
getX (x) { return this.store[x] || 0
}
我想避免这种情况,因为this.store[x]
看起来非常干净。
回答:
我如何定义上
this.store
一个getter来得到一个undefined
值时返回0
?
除非你能预料要支持,并定义为干将他们,要做到这一点,你需要一个Proxy与get
trap,这是新的一样ES2015的(并且不能polyfilled)所有可能的属性名称。代理在性能方面很昂贵,只有在你真正需要时才使用它们。
例子:
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
私有的,你只能通过getX
方法的对象,这将避免使用代理服务器在执行访问每个实例定义setX
和getX
的费用(现在为private data is coming):
class Example { constructor() {
const store = {};
this.setX = (x, y) => {
store[x] = y;
};
this.getX = x => {
return x in store ? store[x] : 0;
};
}
}
const e = new Example();
console.log("Setting a");
e.setX("a", "foo");
console.log("a = " + e.getX("a"));
console.log("b = " + e.getX("b"));
以上是 返回一个适合对象 的全部内容, 来源链接: utcz.com/qa/263223.html