在JS中创建没有canvas实例的CanvasImageData对象

Rhy*_*den 5 javascript html5 canvas

我是Javascript的新手.我正在使用canvas进行一些图像处理,我正在尝试创建一个新的CanvasImageData对象而不实际引用特定的Canvas.

即.

oImageData = CanvasRenderingContext2D.createImageData(vCSSWidth, vCSSHeight)
Run Code Online (Sandbox Code Playgroud)

(来自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);
Run Code Online (Sandbox Code Playgroud)

有没有Canvas实例的方法呢?如果不是有原因吗?

谢谢!

kan*_*gax 3

您当然可以引用createImageData接口原型对象:

CanvasRenderingContext2D.prototype.createImageData.call({ }, 100, 100); // ImageData
Run Code Online (Sandbox Code Playgroud)

createImageData但是,某些环境(例如 WebKit)对要调用的方法(以及可能的其他方法)上下文中的对象类型添加了限制:

CanvasRenderingContext2D.prototype.createImageData.call({ }, 100, 100); // TypeError: Illegal invocation
Run Code Online (Sandbox Code Playgroud)

这至少在 Firefox nightly 中有效(刚刚检查过)。

让我想起其他 WebKit 的上下文限制console.log

console.log.call({ }, 1); // TypeError: Illegal invocation
console.log.call(console, 1); // logs 1
Run Code Online (Sandbox Code Playgroud)