javascript 如何将对象深度绑定到新的“this”值

2024-06-28

我有一个值,它可能是一个原语或一个函数或一个递归地包含原语/函数/对象的对象。

Given a theThis参数,我如何将可能在我的值内的所有函数深度绑定到theThis ?

我尝试过类似的东西:

function deepBind(o, ths) { 
  Object.getOwnPropertyNames(o).forEach(key => { 
    const desc=Object.getOwnPropertyDescriptor(o, key);
    if (typeof desc === "function") Object.defineProperty(o, key, key.bind(ths)); 
    if (Object.getOwnPropertyNames(key).length>0) deepBind(o.key, ths);
  });
}

但那失败了:(

我查看了一些解决方案,例如https://github.com/jonschlinkert/deep-bind/blob/master/index.js https://github.com/jonschlinkert/deep-bind/blob/master/index.js但这并不是独立的。

我正在寻找一个deepBind(val, theThis)独立的解决方案。 我需要解决方案来覆盖 getter 和 setter。

Thx!


这似乎按你想要的方式工作

function deepBind(o, ths) {
    Object.entries(o).forEach(([key, value]) => {
        if (typeof value === "function") {
            // don't use value here :p
        	o[key] = o[key].bind(ths);
        }
        if (typeof value === 'object' || typeof value === 'function') {
        	deepBind(value, ths);
        }
    });
}
const v = {
    foo:3, 
    fn: function() {
        console.log(this);
    }, 
    obj: { 
        bar: 4,
        fn: function() {
            console.log(this);
        }
    }
};
var someThis = {hello: 'world'};
deepBind(v, someThis);
v.fn();
v.obj.fn();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

javascript 如何将对象深度绑定到新的“this”值 的相关文章

  • 如何动态地从对象中提取所有元素

    如何从对象中提取特定列 我有一个列数组 我希望从对象中提取这些字段 该对象将由作为项目的映射循环函数构造 现在在这里 如何动态检查我的字段 我不想要这样的 item col 0 请告诉我一个捷径 const person firstName
  • 使用 ReactJS 旋转图像预览

    我正在尝试使用 ReactJS 旋转图像的预览 因此 我首先允许渲染预览的上传功能 然后在用户点击上传之前 我希望他们可以选择根据自己的喜好旋转图像 这是我用来预览图像的 class ImageUpload extends React Co
  • 在一定时间后自动更改 Firestore 中的字段值 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 I m working on Javascript and here s how s my data looks like 我想要的功
  • 工厂函数方法不更新变量

    我正在尝试设置一个工厂函数 该函数将更新所述工厂函数中特定变量的值 这看起来实现起来很简单 但是 每当我测试它时 我都会得到变量的原始设置值 而不是更新后的值 我确信在范围界定方面我缺少一些细微差别 但这里到底发生了什么 const fac
  • 范围滑块 javascript 以小时和分钟为单位

    我试图分别以小时和分钟为单位显示滑块的值 我对 JS 还很陌生 并且仍在尝试了解它是如何工作的 到目前为止 我所拥有的是一个工作滑块 其最大值为 1440 24 小时内的分钟 在 JS 中 我尝试将其划分为小时和分钟 并使用 innerHt
  • 如果用户禁用了 javascript,如何回退到完全不同的索引页面?

    我有一个大型 动态生成的单页网站 该网站严重依赖 javascript 我想为没有 javascript 的人提供后备 每个版本必须有不同的 php 代码 所以基本上我需要一个完全不同的索引页面 我不想将所有内容都包装在 javascrip
  • 如何对页面的某个部分进行实时更新?

    我需要刷新页面的各个部分 以便在有新数据时进行更新 我该怎么办 使用jquery 例子 是的 jQuery 非常适合这个 查看这些方法 http api jquery com category ajax http api jquery co
  • 系统js语法错误,IE11

    我有一个 Angular 2 应用程序可以在 Firefox 和 Chrome 中工作 但在 IE 中却没有那么多工作 根据我的堆栈跟踪 我的 System js 设置似乎存在问题 这是我在网络控制台中看到的错误描述 Error Syste
  • 错误:捆绑失败:TypeError:无法读取未定义的属性“transformFile”,React Native

    每当我运行react native start时 我都会收到此错误 但是最近在我在节点模块中安装了firebase tools和stripe之后 这种情况开始发生 但在此之前它会运行得很好 这也是错误的堆栈跟踪 ffff 127 0 0 1
  • Angularjs 使用 ng-init 为 ng-model 赋值

    您好 我有以下问题 看起来很简单并且应该有效 但事实并非如此 在我的代码中我输入了
  • 如何在反应路由器的登录页面中隐藏导航栏

    我想隐藏登录页面中的导航栏 我确实做到了 但我在其他页面上看不到导航栏 此代码是 My App jsx 文件的一部分 我在 App 的状态中创造了历史 当路径名是 或 login 时 我会隐藏导航栏 有用 但随后我输入了 ID 和密码 然后
  • Chrome 扩展程序导致 DOM 闪烁,该扩展程序会在页面加载之前删除 DOM 元素

    我正在编写一个 chrome 扩展 我想在页面加载之前删除内容 例如this http tech blog tomchambers me 2016 01 13 How to write a simple page rewriting Chr
  • Backbone.View:delegateEvents 未将事件重新绑定到子视图

    我已将这个问题分解为尽可能小的示例 即 它只是为了演示问题 不一定代表现实世界的场景 假设我有一个父视图 此处为 MainView 其中包含一个子视图 此处为 SubView 如果在任何时候我需要重新渲染父视图 从而重新渲染子视图 我就会丢
  • 纯 JavaScript 工具提示

    我正在尝试用纯 JavaScript 制作一个工具提示 显示在hover 就像 Stack Overflow 中将鼠标悬停在个人资料名称 a 上一样div显示 我尝试使用onmouseover onmouseout并添加了setTimeou
  • 如何使用 $.ajax 发送 JSON 而不是查询字符串?

    有人可以简单地解释一下如何让 jQuery 发送实际的 JSON 而不是查询字符串吗 ajax url url dataType json I was pretty sure this would do the trick data dat
  • 未捕获的类型错误:无法分配给只读属性

    我正在尝试 Nicholas Zakas 所著的 Professional JavaScript for Web Developers 一书中的这个非常简单的示例 但我不知道我在这里做错了什么 我错过了一些非常简单的事情 但我被困住了 这是
  • 将 html

    我有一些服务器端代码当前支持 http 字节范围请求 没有任何问题 但是 我希望能够在将转码后的块发送到客户端之前使用 ffmpeg 即时转码视频文件 位于磁盘上 但 ffmpeg 要求我在获取字节时给它一个寻道时间范围来自客户 给定客户端
  • 当 JavaScript 抛出异常时不要停止它

    我正在使用 JavaScript 编写一个 Windows 边栏小工具 现在我想捕获所有 JavaScript 异常并将其记录到文本文件中 一个问题是 当任何一行抛出异常时 下一行将不会被执行 是否可以自动捕获异常 以便执行以下 JavaS
  • 什么是标志变量?

    最近我遇到了标志变量 但我不知道它们的作用 我不太确定何时使用标志变量以及如何使用它 我用 Google 搜索了它 但没有任何与我的上下文 JavaScript 相关的具体示例 标记变量的定义和使用 http www javascriptk
  • 事件监听器如何/何时附加到 d3.js 中?

    我正在尝试制作一个 SVG 编辑器 长话短说 我需要将鼠标事件附加到

随机推荐

  • 如何使用 SQL 语法更改主键约束?

    我有一个表 其主键约束中缺少一列 我不想通过 SQL Server 对其进行编辑 而是想将其放入脚本中以将其添加为更新脚本的一部分 我可以使用什么语法来执行此操作 我必须删除并重新创建关键约束吗 是的 唯一的方法是使用 Alter 表删除约
  • 如何重置anaconda根环境

    如何重置anaconda的root环境 必须有一个简单的 conda Reset 命令来执行此操作 我不想再次重新安装 anaconda 我有其他不想覆盖的 virtualenv 如果我再次安装 anaconda 就会发生这种情况 See
  • 无法加载资源:加载 .mp3 文件时出错

    我正在使用以下命令向我的应用程序添加声音audioplayers包 但在第一次构建时没有播放声音 加载文件时热重启面团后 我收到此异常 E flutter 32175 ERROR flutter lib ui ui dart state c
  • GCM 注册 ID 已更改

    我开发了一个使用 GCM 技术的应用程序 一切正常 我观察到设备的注册 ID 一段时间后发生了变化 这导致我的应用程序出现问题 因为我的应用程序依赖于注册 ID 那么如何为客户获取固定的Reg ID呢 我读完了这两个原因here http
  • Angular 6 不赞成同时使用 formControlName 和 ngModel

    我有 Angular 6 项目 我一起使用 ngModel 和 formControlName 但角度在下面给了我警告 例如 当我从网格中的按钮打开更新弹出窗口时 我可以轻松地自动绑定更新弹出窗口中的输入 但 Angular 7 表示删除
  • C# 是“??”吗?运算符线程安全吗?

    大家都知道这不是线程安全的 public StringBuilder Builder get if builder null builder new StringBuilder return builder 那这个呢 public Stri
  • 错误:找不到模块:错误:无法解析“@angular/cdk/scrolling”

    我遇到了错误 找不到模块 错误 无法解析 angular cdk scrolling 一旦我在 app module ts 中添加 import TableModule from primeNG 为什么会抛出这个错误 我没有看到 prime
  • 如何在Python多处理中的所有进程之间共享数据?

    我想在给定文章中搜索预定义的关键字列表 如果在文章中找到关键字 则分数加 1 我想使用多重处理 因为预定义的关键字列表非常大 10k 个关键字 文章数量为 100k 我碰到this https stackoverflow com quest
  • 如何构图“也许”镜头?

    如果我有嵌套记录的镜头 其中每个镜头返回一个Maybe 我怎样才能让它们组合起来 这样如果 遍历 中有任何东西返回一个Nothing最终结果是Nothing data Client Client clientProperties Maybe
  • 使用 gson 将 Java 对象转换为 JSON 字符串

    我在这里找到了一些示例 说明如何将 json 转换为 java 对象 但这里我需要将 Java 对象转换为GSON 我有一个Java对象 现在我想将Java对象转换为Gson 我该如何实现这一点 请参考我的代码 Staff obj new
  • Aurora RDS 实例无法停止

    我正在尝试 Amazon Aurora 实例 但看不到停止它的选项 唯一的选项是删除和重新启动 我是不是错过了什么 编辑 2018 09 25 Amazon Aurora 现在支持停止和启动数据库集群 根据本公告 https aws ama
  • javascript 减法(-) 键码

    好的 我需要我的代码来检查减号 减号 是否被按下 如果被按下我想要弹出一个警报框 我都试过了109 and 189关键代码 但我仍然没有得到想要的结果 虽然我按 我没有收到那个警报框 JavaScript字符代码 您在按键事件期间测试的内容
  • 进行 SendInput 时调用全局低级键盘钩子。如何预防?

    我有一个用 c 编写的 win 32 应用程序 它设置低级键盘挂钩 现在我想将输入发送到任何应用程序 例如单词 记事本 我该怎么做呢 我已经足够使用 findwindow sendmessage 了 对于所有这些 我需要了解编辑控件 找到编
  • Python Decimal 模块不适用于 uint64

    我正在尝试将 numpy uint64 由 numpy sum 输出 转换为小数 而不会丢失 Decimal 模块的精度 gt gt gt from decimal import Decimal gt gt gt import numpy
  • 如何在 // 注释中转义反斜杠

    我有一条以反斜杠结尾的评论 就像是 use Clang 警告我 这是多行注释 warning multi line comment Wcomment use 所以我尝试在末尾添加一些空格 但没有帮助 我可以以某种方式逃避反斜杠吗 问题的基础
  • 使用 XQuery 更新自动递增?

    Does XQuery更新支持自增属性 就像中的自增字段一样SQL 我在用着BaseX作为我的数据库 Given Christian Gr n 在 BaseX 邮件列表上的回答 https mailman uni konstanz de p
  • 为什么反斜杠出现两次?

    当我创建包含反斜杠的字符串时 它们会重复 gt gt gt my string why does it happen gt gt gt my string why does it happen Why 你所看到的是表示 of my stri
  • 在javascript中打开本地文件系统中的文件

    我正在寻找一种在 IE 和 Firefox 浏览器中使用 javascript 打开临时目录中的 xls 文件的方法 我尝试使用 JavaScript 如下所示 function openMe var newwindow window op
  • WPF 绑定无法与 int 类型的属性正常工作

    我拥有以下财产int输入我的视图模型 该模型绑定到TextBox 一切正常 TwoWay绑定工作正常 除了一种情况 如果我清除的值TextBox 属性设置器不会被调用 尽管值已被清除TextBox 属性仍保持先前的值 有人遇到过类似的问题吗
  • javascript 如何将对象深度绑定到新的“this”值

    我有一个值 它可能是一个原语或一个函数或一个递归地包含原语 函数 对象的对象 Given a theThis参数 我如何将可能在我的值内的所有函数深度绑定到theThis 我尝试过类似的东西 function deepBind o ths