我想知道是否可以覆盖对象的未启动键的“未定义”,这样:
var obj={}
console.log(obj.randomKey)
output in console:
0
我很清楚我“忘记”初始化 obj.randomKey。 这实际上是我的问题。
我可以为对象或类的任何未初始化的键设置默认值吗?
如果你好奇
我问的原因是我正在尝试解决一个允许使用“本地”语言创建对象的谜语,例如:
const jane = new Thing('Jane')
jane.name // => 'Jane'
// can define boolean methods on an instance
jane.is_a.person
jane.is_a.woman
jane.is_not_a.man
jane.is_a_person // => true
jane.is_a_man // => false
这是我采取的第一个策略:)
更新: 我解开了谜语:) 如果有人有兴趣尝试:https://www.codewars.com/kata/the-builder-of-things/train/javascript
最佳答案
你不能真的定义默认值,但你可以使用ES2015 proxies假装他们有一个:
function createObj(obj) {
return new Proxy(obj, {
get(target, key, receiver) {
if (target[key] === undefined) {
return 0;
}
return Reflect.get(target, key, receiver);
}
});
}
const myObj = createObj({});
console.log(myObj.test); // 0
顺便说一下,这是一种很好的语言方法!
关于javascript - 将对象的 *any* 属性设置为默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43888267/