我从this post了解到,这是修改Object
的JavaScript原型的反模式。不过,我很好奇,如果它被广泛认为是修改其他“内置”原型的反模式。例如:假设我们想为CanvasRenderingContext2D
添加一个setPixel(x,y,color)
函数 - 以抽象出获取上下文图像数据,设置像素为特定颜色,并将图像数据放回的责任。这是修改JavaScript内置原型的反模式吗?
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__ – 2009-11-04 20:38:36
@Fabien - 为什么Safari需要这样的篮球,而Safari 4是否需要这样的? – 2009-11-04 20:40:24
@James Safari 4不需要这个,但是我没有意识到Safari 3需要这个奇怪的东西。伟大的提示法比安! – JasonWyatt 2009-11-04 20:45:22