代码如下:
for(var p in CanvasRenderingContext2D.prototype) { console.log(typeof CanvasRenderingContext2D.prototype[p]); }
报错:
NS_ERROR_XPC_BAD_OP_ON_WN_PROTO: Illegal operation on WrappedNative prototype object
此代码应该是毫无问题的,但firefox都报错。但直接console.log(CanvasRenderingContext2D.prototype[p])可以正常输出。
也就是说,根本不能把这个原型里面的东西提出来用?这是为什么呢?
这是不是bug?如果不是,那么我该什么才能把他正常的提出来?
http://www.cnblogs.com/lixlib/archive/2012/12/21/2828278.html
canvas中的所有的方法都列出来了。还有就是应该可以通过chrome开发者工具来查看canvas中的属性和方法
我也遇到该问题 你的问题找到解决方案了吗, 不知道什么原因, CanvasRenderingContext2D对象 不可以使用prototype 拓展对象的方法
我的问题是这样的
var canvas=document.getElementById('test');
context = canvas.getContext('2d');
context.prototype.ttt=function(){
alert('s');
}
上面代码运行出错
Uncaught TypeError: Cannot set property 'ttt' of undefined
我找到了答案
http://stackoverflow.com/questions/7789636/modify-native-canvasrenderingcontext2d-functions
这篇文章不错
http://perfectionkills.com/whats-wrong-with-extending-the-dom/
你的这个问题,是因为context是实例化后的CanvasRenderingContext2D对象,其prototype就是CanvasRenderingContext2D,而这个对象里面的东西不能直接CanvasRenderingContext2D.xxx而要CanvasRenderingContext2D.prototype.xxx。
至于我的解决办法,我是直接新建了一个空的canvas,然后直接从他身上读取方法,而不是在CanvasRenderingContext2D身上,然后我发现就不报错了。不过我觉得新建了空的canvas真是浪费
另外你推荐的文章很不错
用了个很无奈的方法解决了
要跳過p==="canvas"