Reflect.get和target[key]有何不同?

主要区别在this指向不同,下面输出张三还是李四?:

javascript 复制代码
  const person={
      name:'张三',
      get FullName(){
          return this.name;
      },
  };
      
  let personProxy=new Proxy(person,{
      get(target,key){
          return Reflect.get(target,key)//或者return target[key]
      }
  });
  const p1={__proto__:personProxy,name:'李四'}
  console.log(p1.FullName)

答案:张三。

当我们读取p1.FullName时,它自身是没有该属性的,也没有指定该属性的getter,它会找到继承自personProxy中,此时会触发get读取target里面的key,此时的target目标对象为person,key为FullName,如果想指定调用者为p1,可以使用第三个参数receiver

javascript 复制代码
const person={
    name:'张三',
    get FullName(){
        return this.name;
    },
};
    
let personProxy=new Proxy(person,{
    get(target,key,receiver){
        return Reflect.get(target,key,receiver)
    }
});
const p1={__proto__:personProxy,name:'李四'}
console.log(p1.FullName)//李四

更多好玩好玩前端知识,可以搜索【坤坤前端笔记】小程序,让我们换个姿势学前端。

相关推荐
John_ToDebug1 天前
引擎深处的漫游者:构建浏览器JavaScript引擎的哲学与技艺
javascript·chrome·js
董世昌412 天前
深度解析ES6 Set与Map:相同点、核心差异及实战选型
前端·javascript·es6
徐小夕@趣谈前端3 天前
Web文档的“Office时刻“:jitword共建版2.0发布!让浏览器变成本地生产力
前端·数据结构·vue.js·算法·开源·编辑器·es6
小马_xiaoen3 天前
Proxy 与 Reflect 从入门到实战:ES6 元编程核心特性详解
前端·javascript·ecmascript·es6
前端 贾公子3 天前
Node.js 如何处理 ES6 模块
前端·node.js·es6
esmap3 天前
OpenClaw与ESMAP AOA定位系统融合技术分析
前端·人工智能·计算机视觉·3d·ai·js
菜鸟茜3 天前
ES6核心知识解析01:什么是ES6以及为什么需要ES6
前端·javascript·es6
薛定谔的猫喵喵3 天前
猪笼草生长环境模拟器:交互式生物教育工具实现指南
python·html·echarts·js
esmap4 天前
Clawdbot与ESMAP数字孪生技术融合分析
人工智能·计算机视觉·3d·ai·js
共享家95275 天前
基于 Coze 工作流搭建历史主题图片生成器
前端·人工智能·js