【发布时间】:2009-11-04 20:23:34
【问题描述】:
我从this post 了解到,在 JavaScript 中修改 Object 的原型是一种反模式。但是,我很好奇它是否被广泛认为是修改其他“内置”原型的反模式。
例如:假设我们想在CanvasRenderingContext2D 中添加一个setPixel(x,y,color) 函数 - 以抽象出获取上下文图像数据、将像素设置为某种颜色并将图像数据放回的职责。
CanvasRenderingContext2D.prototype.setPixel = function(x, y, color){
var imgdata = this.createImageData(1,1);
imgdata.data[0] = color.r;
imgdata.data[1] = color.g;
imgdata.data[2] = color.b;
imgdata.data[3] = color.a;
this.putImageData(imgdata,x,y);
};
我没有测试过这段代码,但你明白了。这样的事情是否违反“最佳实践”?
【问题讨论】:
-
此评论与您的问题无关,但如果您想在 Safari 3(可能还有其他)中扩展 CanvasRenderingContext2D 的原型,您需要以这种方式访问它:document.createElement('canvas ').getContext('2d').__proto__
-
@Fabien - 为什么 Safari 需要这样的箍,Safari 4 是否需要这个?
-
@James Safari 4 不需要这个,但是我没有意识到 Safari 3 需要这个奇怪的东西。很棒的小费法比恩!
-
Safari 不会直接暴露 CanvasRenderingContext2D 对象,所以你需要这样做。这可能被解释为一个错误,我同意。 Safari 4 不需要这个。
标签: javascript canvas anti-patterns prototype