我想知道是否有可能为对象的未启动键覆盖“undefined”,例如:

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

顺便说一句语言!

08-03 15:58