Javascript 代理 set() 继承对象上的本地属性

2024-02-01

根据MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/set, handler.set()可以捕获继承的属性赋值:

Object.create(proxy)[foo] = bar;

在这种情况下,如何既监视又允许对继承对象进行本地分配?

var base = {
	foo: function(){
		return "foo";
	}
}

var proxy = new Proxy(base, {
	set: function(target, property, value, receiver){
		console.log("called: " + property + " = " + value, "on", receiver);
		//receiver[property] = value; //Infinite loop!?!?!?!?!
		//target[property] = value // This is incorrect -> it will set the property on base.
		
		/*
			Fill in code here.
		*/
		return true;
	}
})

var inherited = {}
Object.setPrototypeOf(inherited, Object.create(proxy));

inherited.bar = function(){
	return "bar";
}

//Test cases
console.log(base.foo); //function foo
console.log(base.bar); //undefined
console.log(inherited.hasOwnProperty("bar")) //true

经过一些额外的思考,我注意到它拦截了 3 个操作:

属性分配: proxy[foo] = bar 和 proxy.foo = bar 继承属性赋值:Object.create(proxy)[foo] = bar
反射.set()

but not Object.defineProperty() https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty这似乎比 = 运算符的级别还要低。

因此,以下工作:

var base = {
    foo: function(){
        return "foo";
    }
};

var proxy = new Proxy(base, {
    set: function(target, property, value, receiver){
        var p = Object.getPrototypeOf(receiver);
      
        Object.defineProperty(receiver, property, { value: value });   // ***
        return true;
    }
});

var inherited = {};
Object.setPrototypeOf(inherited, Object.create(proxy));

inherited.bar = function(){
    return "bar";
};

// Test cases
console.log(base.foo);                       // function foo
console.log(base.bar);                       // undefined
console.log(inherited.bar);                  // function bar
console.log(inherited.hasOwnProperty("bar")) // true
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript 代理 set() 继承对象上的本地属性 的相关文章

  • Cypress:在 JSON 响应中存根特定键

    我想在 Cypress 中存根以下响应 专门存根密钥ds version 可能的值为 0 1 或 2 每个值将在 UI 上显示不同的元素 fixtures user json email email protected cdn cgi l
  • C# 中的继承树和受保护的构造函数

    给定以下继承树 以有效的方式实现它的最佳方法是什么 abstract class Foo
  • 定时器内嵌套异步等待 - 不返回所需的值

    我必须使用 Mocha 和 chai 测试来测试端点的响应 下面是相同的代码 async function getData userId let response let interval setInterval async gt resp
  • 为什么有人将(Apache mod_expires 参数)ExpiresByType 设置为“访问加 0 秒”?

    在审查答案时这个帖子 https stackoverflow com questions 9933012 how to use mod headers and mod expires to cache 我不明白为什么这里使用 0 秒作为最佳
  • ajax 调用成功后点击链接 href

    我有一个正常的链接 a href http www google com class continue Continue a 我已将点击绑定到一个事件来发布 ajax 请求 如下所示 continue click function ajax
  • JSLint 错误:意外的“这个”

    无法理解为什么 JSLint 对我的使用感到惊讶this在下面的代码中 function testConstr x use strict this joker Whyyy sooo seriousss this x x 对于这两个属性分配
  • 检测 iPad Safari 用户的最佳方法

    添加用于检测 iPad Safari 用户的代码的最佳方法是什么 我的意思是我们应该使用 1 CSS 通过链接媒体 2 JS 通过navigator对象 我听说使用用户代理字符串并不是检测 iPad 的最佳方法 因为存在不一致的情况 请建议
  • 是否可以向 JavaScript 函数发送可变数量的参数?

    是否可以从数组向 JavaScript 函数发送可变数量的参数 var arr a b c var func function debug alert arguments length for arg in arguments alert
  • Antd 选择搜索框未呈现匹配项

    我有产品数据 我正在使用搜索值过滤数据 然后使用过滤后的数据呈现选项 产品数据作为道具来自全局 redux 存储 由于某种原因 下拉列表仅在搜索值为空时显示数据 当我开始输入时 filteredData已更新 组件也重新渲染 但选项不显示任
  • 如何像在浏览器中一样检索准确的 HTML

    我正在使用 Python 脚本来呈现网页并检索其 HTML 它适用于大多数页面 但对于其中一些页面 检索到的 HTML 不完整 我不太明白为什么 这是我用来废弃此页面的脚本 由于某种原因 每个产品的链接不在 HTML 中 Link http
  • 使用 Google 地图 API 进行反向地理编码

    我正在研究 JavaScript Google Map API 版本 3 更准确地说 正在研究反向地理定位 在 的帮助下官方文档 http code google com intl fr apis maps documentation ge
  • JavaScript:嵌套循环?

    我想实现这样的动画 序列 动画以循环开始 想象一下car从 x1 移动到 x2 然后暂停 1 秒 然后再次播放动画 想象一下car从 x2 移动到 x3 等 the car循环是通过向汽车左侧添加 1px 来实现的 值 但我无法弄清楚嵌套循
  • jQuery clone() 复制数据...有时...?

    使用下面的示例 我有一个tr我正在复制 它包含一个 jQueryautocomplete 第一次克隆时 自动完成功能不起作用 因为附加的data items 一片空白 第二次单击 添加 按钮时 自动完成功能将起作用 此后 再次单击 添加 会
  • FB.getLoginStatus() 不起作用

    我正在尝试编写一段代码来检查用户是否登录 发现FBJS API中有一个内置方法 叫做getLoginStatus 我已经在html中实现了它 但出于某种原因 getLoginStatus 内部的alert 不会被触发 我也尝试在 init
  • Apollo 客户端“未找到命名导出‘删除’”

    我正在尝试创建一个apollo client插件Nuxt 3应用 它当前抛出有关名为的包的错误ts invariant file Users my name Repositories project node modules apollo
  • TinyMCE:将 CSS 类属性与 formatselect-dropdown 格式结合使用

    我想定制格式 http wiki moxiecode com index php TinyMCE Configuration theme advanced blockformats在 TinyMCE 中格式选择下拉菜单 http wiki
  • 如何缩放到高图中的特定点

    Highmaps highcharts 是一个 javascript jquery 适配器 可在浏览器等中呈现地图 我有一张突出显示单个国家 地区的地图 但是 世界 地图的比例如此之大 因此我想在将地图加载到相关国家 地区后进行放大 看看
  • html 下钻下拉所选值未插入 MYSQL

    我有两个下拉列表 首先从数据库下拉填充 根据第一个下拉列表的选定值从数据库填充第二个下拉列表 document ready function c change function var c1 c selected text if c1 aj
  • 有没有用 Javascript 编写的开源 JSDoc 解析器?

    我正在寻找一个可以在我的项目中使用的 JSDoc 解析器 我正在寻找可以传递 JSDoc 注释并接收该注释含义的结构化描述的东西 我见过的大多数工具似乎都能够将 JSDoc 注释转换为 HTML 或其他格式 我正在寻找能够提供可用于输入其他
  • 类型错误:无法读取未定义的属性“长度” - 使用安全帽部署时

    我在尝试在安全帽开发链上部署模拟合约时收到以下错误 我正在关注 使用 JavaScript 学习区块链 Solidity 和全栈 Web3 开发 Patrick Collins 在 FreeCodeCamp YT 频道上的 32 小时课程

随机推荐

  • Eclipse Neon CDT 运行配置未设置环境变量

    我刚刚从 Eclipse Kepler 升级到 Neon 3 发现除非在调试器下运行 否则在运行配置中设置环境变量不起作用 截至 2017 年 2 月 6 日 这被确定为 Neon 3 中的回归问题 但我一直无法找到解决方案 有其他人看到这
  • 在绘图文本过滤器中正确转义文本

    根据文件 应该用斜杠转义 但当我逃脱时 未添加文本 有错误消息说Stray near 但这是什么意思以及我该如何解决它 命令和输出 usr bin ffmpeg y i home www 255871 mov af aresample as
  • 为什么 Guava 中不推荐使用 Files.deleteDirectoryContents() ?

    在 Guava 10 中 Google 已弃用文件 deleteDirectoryContents https google github io guava releases 10 0 api docs com google common
  • GADT 上的模式匹配失败

    我更多地使用 ReasonML 并发现了模式匹配type t从以下示例开始 无法处理该错误 错误 此模式与 t float 类型的值匹配 但需要一个与 t int 类型的值匹配的模式 float 类型与 int 类型不兼容 type t a
  • Pandas str 和 object 类型的区别

    Numpy 似乎区分了str and object类型 例如我可以这样做 gt gt gt import pandas as pd gt gt gt import numpy as np gt gt gt np dtype str dtyp
  • 从文件读取清单时出现异常。 Microsoft Word 插件 VSTO

    我正在尝试创建一个 Microsoft Word 插件 每次保存 Word 文档 自动保存或手动保存 时 该插件都会添加并提交到 git 存储库 当我从 Visual Studio 调试模式 中运行程序时 我已经能够获得我想要的功能 当我发
  • constexpr 函数在多个模块中共享

    当我使用 constexpr 函数时 我注意到一个奇怪的行为 我将代码简化为一个简化的示例 从两个不同的翻译单元 模块 A 和 B 调用两个函数 include
  • IllegalStateException: 当前不在 FragmentManager 中

    我知道这听起来像是重复的FragmentStatePagerAdapter IllegalStateException 当前不在 FragmentManager 中 https stackoverflow com questions 112
  • 在我的 Node 应用程序中使用 SSH 连接到 MongoDB

    我的数据库使用 DigitalOcean 我正在尝试在我的节点应用程序中连接到它 我发现了一个名为的 npmtunnel ssh但是我无法连接到它 我的代码如下 它说数据库连接成功 但是当我执行console log mongoose 它显
  • 小程序未显示完整

    我刚刚创建了一个小程序 public class HomeApplet extends JApplet private static final long serialVersionUID 7650916407386219367L Call
  • 为数据层中的实体添加与 .NET Identity ApplicationUser 的关系

    我正在构建一个带有用户登录身份的 NET MVC 应用程序 该应用程序有四层 Web UI 层 参考了我的域和服务层 领域层 没有引用 服务层 参考了我的数据层和领域层 数据层 参考了我的领域层 我想要我的AppUser类与我的数据层中的实
  • 如何使用mongoose动态连接多个mongodb数据库?

    我的项目中有很多数据库 一个是masterDb 其他都是基于masterDb的数据库连接 例如 在验证页面中 用户可以输入 公司 ID 可以使用 masterDb 检查该 公司 ID 如果 ID 存在 则返回特定公司的数据库名称 使用数据库
  • 如何使用Hibernate带来的JBoss日志记录?

    我正在编写使用 Hibernate 的独立 java 应用程序 梅文带来了jboss logging图书馆对我来说 我没有使用 JBoss 问题是 我可以只使用这个库进行日志记录 还是需要下载一些日志记录实现 例如log4j JBoss L
  • 垂直对齐块元素中的文本

    我知道总是有人问垂直对齐 但我似乎无法找到这个特定示例的解决方案 我希望文本在元素内居中 而不是元素本身居中 li a width 300px height 100px margin auto 0 display block backgro
  • 如何在 React 中渲染对象数组?

    你能告诉我如何在 React js 中渲染列表吗 我喜欢这个 https plnkr co edit X9Ov5roJtTSk9YhqYUdp p preview https plnkr co edit X9Ov5roJtTSk9YhqYU
  • Android:如何在缩放和平移后获取图像的X,Y坐标

    我正在开发一个具有缩放和平移图像的应用程序 现在 当用户触摸图像 缩放和平移之后 时 我需要获取图像的 X y 坐标 而不是诸如方法 event getX 和事件之类的屏幕坐标 getX 帮助我 非常感谢 我知道这个问题有点老了 但我面临着
  • 重启浏览器后右键菜单消失

    我正在开发一个 chrome 扩展 我在扩展程序的右键菜单中添加了一个新的菜单项 安装后工作正常 然后当我重新启动浏览器时 新的右键菜单项消失了 但是扩展工作正常 只有新的菜单项消失了 我比较了chrome官方的contextMenu示例
  • 链接不适用于 jsp 和 jquery(如何在 jsp 页面中的锚标记中链接 websiteurl)

    在我的本地主机中它正在工作 但在我的网站上www step2java com the Java核心链接不起作用 部署后 他们将项目根文件夹放入我的 public html 中 例如 Step2java 请告诉我如何解决 我只使用jsp和jq
  • 在移动视口隐藏或删除 div 类?

    首先 我非常了解 CSS 媒体查询 我的问题是这样的 当你将 div 类堆叠在一个 div 中时 例子 div class class1 class2 div 并且您想删除 class2 media 最大宽度 768px 创建以下输出 di
  • Javascript 代理 set() 继承对象上的本地属性

    根据MDN https developer mozilla org en US docs Web JavaScript Reference Global Objects Proxy handler set handler set 可以捕获继