【发布时间】:2018-09-12 21:06:16
【问题描述】:
考虑以下网页。
<html>
<body>
<canvas id="canvas" width="300" height="300" style="border:1px solid #000000;">
</canvas>
</body>
</html>
我在 Firefox 中打开此页面,打开 JS 控制台并输入以下内容。
> document.getElementById("canvas").getContext("2d")
输出如下:
CanvasRenderingContext2D { canvas: canvas#canvas, mozCurrentTransform: (6) […], mozCurrentTransformInverse: (6) […], mozTextStyle: "10px sans-serif", mozImageSmoothingEnabled: true, globalAlpha: 1, globalCompositeOperation: "source-over", strokeStyle: "#000000", fillStyle: "#000000", filter: "none" }
另一方面,如果我自己创建一个对象并复制CanvasRenderingContext2D 的所有内容,它仍然只是一个普通对象。
var realContext = document.getElementById("canvas").getContext("2d")
var myContext = new Object()
for (var property in realContext) {
myContext[property] = realContext[property];
}
myContext
Object { drawImage: drawImage(), beginPath: beginPath(), fill: fill(), stroke: stroke(), clip: clip(), isPointInPath: isPointInPath(), isPointInStroke: isPointInStroke(), createLinearGradient: createLinearGradient(), createRadialGradient: createRadialGradient(), createPattern: createPattern(), … }
是什么让 CanvasRenderingContext2D 成为 CanvasRenderingContext2D?
作为推论,我怎样才能将我普通的旧对象变成CanvasRenderingContext2D?
编辑:我不关心 JS 控制台说什么。我确实在乎我不能像使用原始上下文一样使用我的新上下文。
myContext.save()
TypeError: 'save' called on an object that does not implement interface CanvasRenderingContext2D
目标是能够像使用旧对象一样使用新对象并在原始画布上绘图。
编辑:我已经寻找了不需要需要使用画布修改网站源代码的解决方案。
【问题讨论】:
标签: javascript html5-canvas metaprogramming javascript-objects