我是Java的新手。我正在使用 Canvas 进行一些图像处理,并且试图创建一个新的CanvasImageData对象,而没有实际引用特定的Canvas。

即。

oImageData = CanvasRenderingContext2D.createImageData(vCSSWidth, vCSSHeight)

(来自MSDN)
    // Why can't I write:
    var image_data = CanvasRenderingContext2D.createImageData(50, 50);
    // or:
    var image_data = CanvasRenderingContext2D.prototype.createImageData(50, 50);
    // ?

    // Instead I must do:
    var canvas = document.createElement("canvas");
    var image_data = canvas.createImageData(50, 50);

没有Canvas实例,有没有办法做到这一点?如果没有,为什么?

谢谢!

最佳答案

您当然可以从接口(interface)原型(prototype)对象中引用createImageData:

CanvasRenderingContext2D.prototype.createImageData.call({ }, 100, 100); // ImageData

但是,某些环境(例如WebKit)在要调用createImageData方法(以及可能的其他方法)的上下文中增加了对象类型的限制:
CanvasRenderingContext2D.prototype.createImageData.call({ }, 100, 100); // TypeError: Illegal invocation

至少每天晚上在Firefox中运行一次(仅选中)。

让我想起了其他WebKit的console.log上下文限制:
console.log.call({ }, 1); // TypeError: Illegal invocation
console.log.call(console, 1); // logs 1

09-17 04:09