首页 新闻 赞助 找找看

firefox关于访问prototype报错的问题

1
悬赏园豆:50 [待解决问题]

代码如下:

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?如果不是,那么我该什么才能把他正常的提出来?
十年灯的主页 十年灯 | 菜鸟二级 | 园豆:356
提问于:2013-01-16 17:58
< >
分享
所有回答(4)
0

http://www.cnblogs.com/lixlib/archive/2012/12/21/2828278.html

canvas中的所有的方法都列出来了。还有就是应该可以通过chrome开发者工具来查看canvas中的属性和方法

chenping2008 | 园豆:9836 (大侠五级) | 2013-01-16 21:47
0

我也遇到该问题  你的问题找到解决方案了吗,  不知道什么原因,  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 

totola147 | 园豆:202 (菜鸟二级) | 2013-03-03 01:42

我找到了答案 

http://stackoverflow.com/questions/7789636/modify-native-canvasrenderingcontext2d-functions

 

这篇文章不错

http://perfectionkills.com/whats-wrong-with-extending-the-dom/

支持(0) 反对(0) totola147 | 园豆:202 (菜鸟二级) | 2013-03-03 02:11

你的这个问题,是因为context是实例化后的CanvasRenderingContext2D对象,其prototype就是CanvasRenderingContext2D,而这个对象里面的东西不能直接CanvasRenderingContext2D.xxx而要CanvasRenderingContext2D.prototype.xxx。

 

至于我的解决办法,我是直接新建了一个空的canvas,然后直接从他身上读取方法,而不是在CanvasRenderingContext2D身上,然后我发现就不报错了。不过我觉得新建了空的canvas真是浪费

另外你推荐的文章很不错

支持(0) 反对(0) 十年灯 | 园豆:356 (菜鸟二级) | 2013-03-05 17:22
0

用了个很无奈的方法解决了

十年灯 | 园豆:356 (菜鸟二级) | 2013-03-05 17:44
0

要跳過p==="canvas"

simonleung | 园豆:211 (菜鸟二级) | 2013-10-22 14:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册