JS:在调用文件中的每个其他函数之前调用某个函数

2024-07-04

我有一个关于在 JS 中更好地重用代码的问题。

例如我有文件functions.js具有以下功能:

export const a = ()=>{...}
export const b = ()=>{...}
export const c = ()=>{...}
....
const foo = ()=>{...}

我想在调用此类中的每个函数之前调用 foo() 函数。 简单的解决方案是:

export const a = ()=>{foo() ...}
export const b = ()=>{foo() ...}
export const c = ()=>{foo() ...}

但是如果我有超过 3 个函数怎么办?如何优化 foo() 函数调用并在每次调用每个文件函数之前调用它?


你可以使用Proxy其中目标是具有所有功能的一个对象,然后您可以使用gettrap 来捕获来自该代理的每个函数调用。然后,您可以只导出该代理对象,而不是导出每个函数。

const a = (paramA, paramB) => console.log('a', paramA, paramB)
const b = () => console.log('b')
const c = () => console.log('c')

const foo = () => console.log('Foo')

const functions = new Proxy({a, b, c}, {
  get() {
    foo();
    return Reflect.get(...arguments);
  }
})

functions.a('foo', 'bar')
functions.c()

如果您想捕获被调用的函数参数并将这些参数传递给foo您可以从 get 方法返回一个代理函数,您可以在其中访问提供的参数,然后在内部调用 foo 并调用函数。

const a = (paramA, paramB) => console.log('a', paramA, paramB)
const b = () => console.log('b')
const c = () => console.log('c')

const foo = (...params) => {
  console.log('Foo', params)
}

const functions = new Proxy({a, b, c}, {
  get(target, prop) {
    return function(...params) {
      foo(...params);
      target[prop].apply(null, params)
    }
  }
})

functions.a('foo', 'bar')
functions.c('baz')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS:在调用文件中的每个其他函数之前调用某个函数 的相关文章

  • 显示工具提示时 d3.event 的 x 和 y 坐标不正确

    我正在尝试在水平条形图上显示工具提示 如果我稍微向下滚动页面 此工具提示将无法正常工作 如果条形图在视图中且无需滚动 则此方法效果很好 但是 如果我在图表上方添加更多元素 当我向下滚动时 工具提示会从鼠标指针处移至更高位置 请帮助我解决这个
  • 如何更改Jquery表单验证插件中“此字段为必填”的内容?

    如何将 Jquery 表单验证插件中的 此字段为必填字段 的一般消息更改为 fi 必须 可以使用以下代码更改消息的颜色 但如何更改内容呢 我想更改所有 此字段为必填 消息 我想将所有 必需 消息更改为 fi 必须 selector vali
  • 内存模型中的词法作用域是什么样的?

    假设我们有一个函数 function foo var x 10 function bar var y 20 return x y return bar console log foo 这在内存模型中会是什么样子 到目前为止 这就是我想象的堆
  • GWT - 找不到入口点类

    我最近开始开发另一个 GWT 模块 因此 我创建了一个包 其中包含所有新类和一个实现新入口点的特定类 我将 gwt xml 修改为新的入口点 当我编译时 出现以下错误 GWT Compiling client side code WARNI
  • 将 HTML 表导出到 Excel JavaScript 函数添加选择文件名

    我有以下将 HTML 导出到 Excel 的函数 function generateexcel tableid var table document getElementById tableid var html table outerHT
  • 使用 javascript 分割图像

    如何使用 javascript 获取单个图像的一部分并将其存储在数组中 然后在 html5 画布上随机显示 您可以使用drawImage 方法的剪切参数并将剪切的图像绘制到动态创建的画布上 一个例子可以是 function getClipp
  • 为 Flutter Web 应用程序添加 id 或 name 属性或其他标识方式?

    在编写 Flutter Web 应用程序时 我尝试利用基于 Selenium 的 Web UI Testing 框架 遗憾的是 我无法通过 id 或 name 属性识别代表某个 flutter 小部件的 HTML 元素 HTML 文档中不存
  • Angular ui - 选项卡控制器执行多次

    当我单击一个选项卡时 相应的控制器会执行 4 次 为什么 E g DetailsPersonController s init函数执行了4次 仅应在加载选项卡视图后执行 HTML 标签
  • 是否可以从 JavaScript 注入的内联样式中减去一个数字?

    我在 HTML 中添加了内联样式 例如style left 10px 我可以添加 减去该数字吗 我想创建一个可以删除的规则8px从该数字开始 无论该数字是多少 我尝试使用丑陋的 importanthack 来覆盖它 但是当初始值改变时这没有
  • 使用 SVG 的部分边框/描边

    我正在使用 svg d3 创建由 矩形 元素组成的图表 为每个矩形添加部分边框 描边 仅在矩形顶部 的最佳方法是什么 Thanks 我不认为 SVG 支持仅描边矩形或路径的一部分 描边不像 CSS 边框 您还有其他一些选择 所有这些都需要一
  • 使用 Javascript 进行 SVG 旋转

    我已经在 HTML 页面中创建了一个 SVG 图像 现在我想移动 SVG 形状以使用 JavaScript 按钮 我的应用程序的 JSFiddle 在这里 http jsfiddle net johndavies91 xwMYY http
  • 使用 Phantom.js 将文件加载到 IMAGE 对象中

    我正在尝试加载图像并将其数据放入 HTMLImage元素但没有成功 var fs require fs var content fs read logo png 读取文件的内容后 我必须以某种方式将其转换为图像或将其打印到画布上 我试图使用
  • AJAX 调用后使用 jquery 刷新 DOM

    我正在做一个新项目http www hotwirerevealed com http www hotwirerevealed com它显示 识别 hotwire com 上的酒店 输入状态和目的地后 我有一个 javascript 函数 它
  • Numpy,沿数组维度应用函数列表

    我有一个类型的函数列表 func list lambda x function1 input lambda x function2 input lambda x function3 input lambda x x 和形状为 4 200 2
  • 使用加载器 ts-node/esm.js 运行节点需要导入具有 .js 扩展名

    我正在尝试将我的 package json 设置为模块来运行节点 14 type module 如果我在打字稿文件上运行此命令 node loader ts node esm mjs experimental top level await
  • scrollIntoView 滚动得太远

    我有一个页面 其中包含从数据库动态生成的带有 div 的表行的滚动条 每个表格行的作用就像一个链接 有点像您在视频播放器旁边的 YouTube 播放列表中看到的那样 当用户访问该页面时 他们所在的选项应该位于滚动 div 的顶部 此功能正在
  • 使用 RaphaelJS 确定图像何时加载到 svg 中

    我正在尝试弄清楚如何确定 svg 图像何时加载到浏览器中 我正在使用 Raphael JS 并且我已经尝试过 var image paper image path 0 0 10 10 image node addEventListener
  • Twitter 引导工具提示说明不起作用?

    我注意到我的 Twitter 引导工具提示不尊重data position 所以 我前往Twitter Bootstrap 工具提示演示 http twitter github com bootstrap javascript html t
  • JavaScript。如果数组包含重复数字,Array .sort() 方法会为 Chrome 和 Firefox 返回不同的结果

    我有包含随机数的数组 当我试图通过排序这个数组时 sort 方法 如果数组包含重复的数字 结果会不同 下面的代码在 Chrome 和 Firefox 中的工作方式有所不同 1 2 3 4 5 6 7 8 9 2 15 3 4 5 1 2 3
  • Phantomjs 可以工作,但速度很慢

    我正在尝试使用 PhantomJS 截取网页的屏幕截图 具体来说 我正在使用捕获的示例espn com from this http skookum com blog dynamic screenshots on the server wi

随机推荐

  • 图像选择器在 React Native 应用程序中不起作用,为什么?

    我已经成功安装了react native image picker 对于一个新的react本机应用程序 链接它并通过info plist文件授予正确的权限来访问相机 照片等 我正在使用 React native image picker 页
  • 在实际应用或执行之前验证 yaml 中定义的 OpenShift 对象

    我在 template yaml 文件中有一个 OpenShift 模板 其中包括以下对象 部署配置 pod 服务和路由 我使用以下命令来执行 yaml oc process f template yml oc apply f 我想在实际应
  • 将 WebView 保存为 PDF 返回空白图像?

    我正在尝试弄清楚如何将 WebView 保存到 PDF 并且完全卡住了 真的很感激一些帮助吗 我在 OSX 上的 Cocoa 和 Swift 中执行此操作 这是到目前为止我的代码 import Cocoa import WebKit cla
  • 如何根据对象属性字符串过滤“ngFor”循环内的项目

    我需要过滤里面的项目ngFor循环 通过更改下拉列表中的类别 因此 当从列表中选择特定类别时 它应该只列出包含该相同类别的项目 HTML 模板
  • java中的长轮询

    我已经编写了用于长轮询的服务器端代码 我想用java写客户端程序 因此 根据长轮询 客户端发送一个由服务器帮助的请求 当事件发生时服务器响应该请求 然后客户端发送新的请求 所以我面临的麻烦是用java编写的客户端 发送请求后 如何继续检查客
  • JavaScript 开发人员不使用 Array.push() 是否有原因?

    我经常看到开发人员在 JavaScript 中使用如下所示的表达式 arr arr arr length Something arr arr length Another thing 不会push更合适吗 arr arr push Some
  • 通过 powershell 将调试器附加到多个进程

    我有几个正在运行的进程 我想通过 powershell 将它们附加到 VS 调试器 目前 我可以这样做 Get Process NServiceBus Host Debug Process 如果只有一个进程 系统会提示我选择正确的调试器 然
  • 谷歌模拟 - 我可以在同一个模拟对象上多次调用 EXPECT_CALL 吗?

    如果我打电话EXPECT CALL在同一个模拟对象上两次TEST F 会发生什么 期望是否附加到模拟对象中 或者第二次调用是否消除了第一次调用的效果 I found 后子句 https github com google googletes
  • 滚动后 ListView 未显示正确的值

    在我的应用程序中我使用的是CustomListView与ArrayAdapter显示不同国家的时间 但在 6 到 7 行之后 取决于手机屏幕尺寸 时间值会重复 根据之前的一些文章 我编写了以下代码片段来获得解决方案 但问题仍然存在 以下是我
  • 如何等待进程及其所有子进程退出?

    是否有一个等待方法 当目标进程及其所有子进程退出时会返回 看来 Process WaitForExit 只会等待目标进程 net 中有一个错误会给出您所追求的行为 WaitForExit 如果您异步读取输出 将等待所有子进程 p Start
  • vue js 2:访问已安装函数中的道具

    我的子组件中有数据道具 在已安装函数的子组件内部 我需要从 props 获取特定值并设置选择下拉值 我正在使用 vue multiselect 插件 工作正常 这是代码 module exports props Subscriptions
  • python easy_install:指定存放所需文件的目录

    我正在尝试使用 easy install 来安装 MySQL python 它几乎立即失败 mysql c 36 23 错误 my config h 没有这样的文件或目录 mysql c 38 19 错误 mysql h 没有这样的文件或目
  • Windows 窗体应用程序中异常处理的最佳实践?

    我目前正在编写我的第一个 Windows 窗体应用程序 我现在已经阅读了几本 C 书籍 因此对 C 必须处理异常的语言特性有了相对较好的了解 然而 它们都非常理论化 因此我还没有了解如何将基本概念转化为应用程序中良好的异常处理模型 有人愿意
  • 使用部署在 Tomcat 中的 Web 应用程序关闭 Tomcat

    我对我的 webapp 开发中遇到的 tomcat 操作有一些疑问 有什么办法可以从部署在tomcat中的web应用程序中关闭tomcat本身吗 tomcat 是否在一个 JVM 或单个 JVM 中运行其所有 webapps war 或者在
  • GHC 截断 Unicode 字符输出

    我无法让 GHCi 或 GHC 打印 unicode 代码点 221A 平方符号 我不认为这是我的外壳 因为我可以让 ruby 来做 irb gt puts u221A GHC GHCi 是另一个问题 ghci gt putStrLn 87
  • 使用深度名称向量作为索引替换嵌套列表

    采取一个简单的嵌套列表L L lt list lev1 list lev2 c bit1 bit2 other list yep 1 L lev1 lev1 lev2 1 bit1 bit2 other other yep 1 1 一个向量
  • 带图像背景的页面的 V 形部分

    I m trying to make a one page website But I would like something to diversify it from all other similar sites I came up
  • 在模拟器中实施应用内结算

    我一直在阅读有关 Android 应用程序的 实施应用内计费 的内容 并且文档说不可能在模拟器中测试该应用程序 真的吗 我正在开发的手机没有 移动数据计划 因此我尝试通过 USB 通过 PC 连接手机 但由于我的 PC 位于代理后面 因此我
  • 使用 M1 Mac 进行 Python 多处理

    我有一台 Mac Mac Os 11 1 Python Ver 3 8 2 需要在多处理中工作 但程序不起作用 import multiprocessing def func index int print index manager mu
  • JS:在调用文件中的每个其他函数之前调用某个函数

    我有一个关于在 JS 中更好地重用代码的问题 例如我有文件functions js具有以下功能 export const a gt export const b gt export const c gt const foo gt 我想在调用