给出一个第三方库,该库导出一个函数并在其内部逻辑中使用此函数-有什么方法可以重新定义此函数? 例如:
third-party.js
export function a() {
console.log('a');
}
export function b() {
a();
}
my-module.js
import * as tp from 'third-party';
//Re-define, something like this
Object.defineProperty(tp, 'a', { writable: true, value: () => console.log('c')});
//Call b and get the re-define function called
tp.b(); //Expected output: 'c'
一些亮点:
a
而不是a
本身的函数。答案 0 :(得分:2)
导出的模块是只读的。因此,您不能这样做。
delete tp.a;
tp.a = () => {
console.log('c')
}
tp.a() // 'c'
tp.b() // You'll still get 'a'
// it's because, b is calling exported function a
如果您希望tp.b()
需要覆盖该值,则无需导出它们,而是调用实例。在示例代码中,仅导出a
而不是b
。但是,既然如此,您正试图从第三方库中覆盖它。不可能这样做。
但是,如果您坚持使用它们,则必须重写这两个功能。
const obj = {...tp}
obj.a = () => {
console.log('c')
}
obj.b() // 'a'
obj.b = () => {
obj.a()
}
obj.b() // 'c'