首页 > 解决方案 > 调用缺少的对象属性时出现javascript打印错误

问题描述

我想编写一个代理对象以在调用原始对象中未找到的某些属性时自动打印错误。

const proxyObjectFn = () => {
  const _obj = Object.assign({}, originalObject);

  const get = (key) => {
    const value = _obj[key];
    if (value === undefined) {
      console.error(`${key} not found`);
    }
    return value;
  };

  return {
    get,
  };
};

const proxyObject = proxyObjectFn();

export default proxyObject;

// caller
proxyObject.get('someProperty')

这行得通,但是有什么优雅的方法可以让我打电话proxyObject.someProperty而不是打电话proxyObject.get('someProperty')吗?

更新

让我说得更具体一些。其实我正在写一个翻译对象。

原始对象可能来自 json,例如{ "HELLO_KEY": "Hello World" }. 我{ label: _t.SOME_I18N_KEY }在 UI 显示代码中调用,假设_t是上面的代理对象。我可以打印警告告诉我缺少翻译。

标签: javascriptjavascript-objects

解决方案


您可以使用该Proxy对象:

const handler = {
  get: (obj, prop) => {
    if(!obj.hasOwnProperty(prop)) console.error(`${prop} not found`);
    return obj[prop];
  }
};

const _t = new Proxy({ "HELLO_KEY": "Hello World" }, handler);

console.log(_t.HELLO_KEY);
console.log(_t.SOME_NONEXISTENT_KEY);


推荐阅读