我從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