Javascript定义';跌破';对象上的getter?

Javascript定义';跌破';对象上的getter?,javascript,object,getter,Javascript,Object,Getter,我已经创建或正在创建一个函数,该函数将接受带有任意值的数组,并返回格式为{array\u value1:count2,array\u value2:count2,…}的对象 是否可以覆盖或扩展对象的默认get属性,以便在另一段代码访问对象中不存在的键时返回值或运行函数?例如,如果有人试图访问return\u对象[key\u不存在],我是否可以修改getter,使对象不返回null,而是返回0 我知道你确实可以,但它似乎没有能力修改访问不存在的属性时发生的情况——我知道Ruby具有这种能力(而且它

我已经创建或正在创建一个函数,该函数将接受带有任意值的
数组
,并返回格式为
{array\u value1:count2,array\u value2:count2,…}
对象

是否可以覆盖或扩展对象的默认
get
属性,以便在另一段代码访问对象中不存在的键时返回值或运行函数?例如,如果有人试图访问
return\u对象[key\u不存在]
,我是否可以修改
getter
,使对象不返回
null
,而是返回0

我知道你确实可以,但它似乎没有能力修改访问不存在的属性时发生的情况——我知道
Ruby
具有这种能力(而且它在IIRC中使用得相当广泛)。有没有一种方法我还没有找到

下面的具体问题

任务:计算包含在以下形式的数组中的票证数

const tickets = [
  'red',
  'red',
  'green',
  'blue',
  'green'
]
并以以下格式返回计数:

{
  red: 2,
  green: 2,
  blue: 1
}
到目前为止,我的职能是:

const countTickets = (tickets) => {

  let ret_obj = {};

  // I did not include this initially, which I think should be fine
  ret_obj["red"] = 0
  ret_obj["green"] = 0
  ret_obj["blue"] = 0

  for (let ticket of tickets) {
    if (ret_obj.hasOwnProperty(ticket)) {
      ret_obj[ticket] += 1;
    } else {
      ret_obj[ticket] = 1;
    }
  }
  return ret_obj;
}

对于问题的第一部分:可能,使用代理,但最好在可能的情况下避免使用代理。对于第二部分,使用
ret_obj[ticket]=(ret_object[ticket]| 0)+1