JavaScript Proxy 的隐藏魔法:自动补全对象属性

JavaScript Proxy 的隐藏魔法:自动补全对象属性

Proxy 是 JavaScript 中的一个强大特性,它允许你创建一个对象的代理,从而可以拦截并自定义该对象的基本操作。下面介绍一个有趣且实用的 Proxy 用法:自动补全对象属性。

实现代码

const createAutocompleteObject = (suggestions) => {
  return new Proxy({}, {
    get(target, prop) {
      if (prop in target) {
        return target[prop];
      }
      
      // 查找最接近的属性名
      const closest = Object.keys(target).find(key => 
        key.toLowerCase().includes(prop.toLowerCase())
      );
      
      if (closest) {
        console.warn(`属性 "${prop}" 不存在,您是不是想访问 "${closest}"?`);
        return target[closest];
      }
      
      // 如果开启了建议模式
      if (suggestions) {
        const similar = Object.keys(target).filter(key =>
          key.toLowerCase().startsWith(prop.toLowerCase())
        );
        
        if (similar.length > 0) {
          console.warn(`属性 "${prop}" 不存在。相似属性: ${similar.join(', ')}`);
        }
      }
      
      return undefined;
    }
  });
};

// 使用示例
const obj = createAutocompleteObject(true);
obj.userName = "张三";
obj.userAge = 30;
obj.accountBalance = 1000;

console.log(obj.username); 
// 控制台警告: 属性 "username" 不存在,您是不是想访问 "userName"?
// 输出: "张三"

console.log(obj.acc); 
// 控制台警告: 属性 "acc" 不存在。相似属性: accountBalance
// 输出: undefined
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星月前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值