我正在尝试包装一个名为getScreenCTM
的所有SVGElements实现的函数。
我的目标是所有svg元素对此方法的所有调用都将调用我的包装函数,该函数将打印一些东西,然后委托给原始的本机实现。
以下是我的尝试:
<svg id="a"></svg>
和
window.nativeGetScreenCTM = SVGElement.prototype.getScreenCTM;
SVGElement.prototype.getScreenCTM = function() {
var matrix = window.nativeGetScreenCTM();
console.log('printing something:');
return matrix;
};
var svgElem = document.getElementById('a');
svgElem.getScreenCTM();
但是当执行最后一行时,不打印任何内容。调用原始getScreenCTM
而不是我的包装器实现。
您可以在此处播放:https://jsfiddle.net/zwxr2c9k/1/
我该如何做到这一点?
答案 0 :(得分:3)
你可能正在扩展错误的元素,看起来你有一个$text | Select-Xml -XPath '//Report[@category="thisone"]//String'|%{$_.Node.'#text'} | Tee-Object -FilePath C:\Path\To\NewFile.txt
SVGGraphicsElement
window.nativeGetScreenCTM = SVGGraphicsElement.prototype.getScreenCTM;
SVGGraphicsElement.prototype.getScreenCTM = function() {
var matrix = window.nativeGetScreenCTM.apply(this, arguments);
console.log('printing something:');
return matrix;
};
var svgElem = document.getElementById('a');
svgElem.getScreenCTM();
另请注意,您不能只调用<svg id="a"></svg>
,因为它需要window.nativeGetScreenCTM
值才能成为实际的SVG元素。
不过,您可以使用this
或apply