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

标签 javascript

我想知道是否可以覆盖对象的未启动键的“未定义”,这样:

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/

相关文章:

javascript - 在 Highcharts 中以百分比设置列宽

javascript - 如果转换持续 n 秒,是否可以在该时间的指定百分比处启动它?

javascript - react 导航未定义错误

javascript - 将计算值插入不同的 DOM 元素

javascript - React JS fetch 作为 POST 跨域,PHP 返回 200 但没有正文响应

javascript - 咕噜复制单个文件

javascript - 在JavaScript中创建自定义UI框架的最佳做法

javascript - ASP.NET MVC Core - 具有动态加载的 PartialViews 的 JavaScript 事件处理程序

Javascript - 打开链接

javascript - 存储哈希信息以供下拉选择