我有一个关于在 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
其中目标是具有所有功能的一个对象,然后您可以使用get
trap 来捕获来自该代理的每个函数调用。然后,您可以只导出该代理对象,而不是导出每个函数。
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(使用前将#替换为@)