将对象的*any*属性设置为默认值

Mic*_*ich 2 javascript

我想知道是否可以覆盖对象的未启动键的"未定义",以便:

var obj={}
console.log(obj.randomKey)

output in console:
0
Run Code Online (Sandbox Code Playgroud)

我很清楚我"忘记"启动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
Run Code Online (Sandbox Code Playgroud)

这是我采取的第一个策略:)

更新: 我解决了谜语:)如果有人有兴趣尝试:https://www.codewars.com/kata/the-builder-of-things/train/javascript

nil*_*ils 5

您无法真正定义默认值,但您可以使用ES2015代理假装他们有一个:

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
Run Code Online (Sandbox Code Playgroud)

顺便说一句语言的好方法!