对于个人项目,我想在对象属性公开的标准JS函数之后执行自定义函数。
在“ CanvasRenderingContext2D”的情况下,
CanvasRenderingContext2D.prototype.clearRectREF = CanvasRenderingContext2D.prototype.clearRect;
CanvasRenderingContext2D.prototype.clearRect = function(x, y, width, height) {
this.clearRectREF(x, y, width, height);
makeXMLHttpRequest("/", "POST");
}
这会将对“ clearRect”功能的引用存储在“ clearRectREF”功能中。
某些JS函数具有不同的方法签名,例如'CanvasRenderingContext2D.setTransform'
根据MDN Web文档,此方法的签名为:
ctx.setTransform(a, b, c, d, e, f);
ctx.setTransform(matrix);
因为JS不支持方法重载,这使我有些困惑。如何在浏览器中实现此功能,并在具有2个不同签名的情况下如何存储对此功能的引用?
我需要这个,因为我无法修改应用程序的JS,因此在Selenium中,我正在使用这种方法...
如何在浏览器中实现此功能,并且在具有2个不同签名的情况下如何存储对此功能的引用?
它仍然只是一个函数,但是可以使用不同数量的参数和/或不同类型的值来调用,并且在内部确实可以区分这些。有关示例,请参见Javascript中的函数重载-最佳实践或Javascript中的方法重载。
在包装函数中,可以使用arguments
和apply
或仅休息和扩展语法来达到相同的效果:
CanvasRenderingContext2D.prototype.clearRect = function(...args) {
this.clearRectREF(...args);
makeXMLHttpRequest("/", "POST");
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句