Javascript 向画布对象添加新上下文

Javascript 向画布对象添加新上下文,javascript,canvas,Javascript,Canvas,我正在用javascript制作一个库,我想知道是否有某种方法可以将新类型的上下文添加到画布而不是2d var ctx.document.getElementById('canvas').getContext("othercontext"); 在这里,我将创建一个包含所有普通2d属性的othercontext,再加上一些其他属性。有什么方法可以做到这一点吗?虽然我还没有找到任何能确切回答您问题的方法,但我想暂时声明,在任何Javascript实现中,您都不太可能定义一个新的上下文(即使您可以,

我正在用javascript制作一个库,我想知道是否有某种方法可以将新类型的上下文添加到画布而不是2d

var ctx.document.getElementById('canvas').getContext("othercontext");

在这里,我将创建一个包含所有普通2d属性的othercontext,再加上一些其他属性。有什么方法可以做到这一点吗?

虽然我还没有找到任何能确切回答您问题的方法,但我想暂时声明,在任何Javascript实现中,您都不太可能定义一个新的上下文(即使您可以,浏览器也可能暂时不支持它)。但是,您可以使用其他属性修改已经存在的“2d”上下文,也许可以通过构造函数运行它们?

我很确定这是不可能的。我建议将其包装在对象中或向上下文添加方法。简单的答案是不,这是不可能的

画布上下文是由浏览器供应商(Chrome、Firefox等)创建的,而不是JavaScript/画布作者(你和我)

除了
“2d”
“webgl”
之外,canvas规范还规定浏览器供应商可以定义自己的(实验性)上下文(如“moz-3d”),但也不能定义JavaScript作者


坚持向现有上下文添加新方法。(或制作包装器等)

您不能完全做到这一点,但可以挂接
getContext
方法并返回具有额外属性和方法的扩展2D上下文:

(函数(){
//保存旧的getContext函数
var oldGetContext=HTMLCanvasElement.prototype.getContext;
//用我们的新函数覆盖getContext
HTMLCanvasElement.prototype.getContext=函数(名称){
//如果请求的画布类型为“othercontext”,
//在返回2d画布之前对其进行扩充
如果(名称==“其他上下文”){
var plainContext=oldGetContext.call(这是“2d”);
返回上下文(plainContext);
}否则{
//获取getContext的原始结果
返回oldGetContext.apply(这个,参数);
}
}
//向上下文对象添加方法
函数augment2dContext(inputContext){
inputContext.drawSmileyFace=函数(){/*…*/};
inputContext.drawRandomLine=函数(){/*…*/};
inputContext.橡皮擦=函数(){/*…*/};
返回inputContext;
}
})();
因此,调用
someCanvas.getContext(“othercontext”).drawSmileyFace()
将调用添加到
getContext(“2D”)
的普通2D上下文返回值中的
drawSmileyFace

但是,我不愿意建议在实际部署的代码中使用此模式,因为:

  • 您的上下文名称可能稍后由浏览器本机实现,您对
    getContext
    的覆盖将阻止该上下文类型被访问
  • 更一般地说,它通常类似于DOM元素,因为宿主对象可以(但通常不会)在完全普通的操作(如属性访问)上抛出错误

我一直在修改2d上下文,将其包装在objectAh中,好的。好吧,那可能是你最好的选择。我还没有和构造器一起工作过。你能给我指个地方了解他们吗?你让我好奇!您对新框架的设想是什么?它与现有的2d/3d实现有何不同?谢谢。这正是我要找的!