【发布时间】:2020-12-15 10:33:06
【问题描述】:
我想知道是否有办法修改 TypeScript 中的函数并访问其中的原始函数。这是我如何让它工作的一个例子:
let obj = {
shout: () => {
console.log("AHHHHH!");
},
};
let s = obj.shout;
obj.shout = () => {
console.log("I'm going to shout.");
s();
};
obj.shout(); //-> "I'm going to shout", "AHHHHH!"
通过这种方式,我可以在呼喊函数被调用时为其添加警告 - 但我觉得这样做很丑陋,所以我想知道是否有更好的方法。
【问题讨论】:
-
s.call(obj)或s.apply(obj),可能 -
通常你也会关心传递正确的接收者 (
this) 和所有参数到函数和return它的返回值,但如果你知道你不需要它们(在你的情况下,一个没有参数和没有返回值的箭头函数)那么这完全有效。这是正常的做法。 -
您正在寻找的可以称为方法修改,您的第一种方法尽可能纯粹。考虑到 Bergi 的评论,人们可以考虑提供一些抽象,以涵盖拦截和更改方法的控制流(从而修改函数/方法)的最有用的情况,这是示例性完成的在我下面的答案中。
标签: javascript typescript methods metaprogramming modifier