我試圖「僞造」一個畫布,用這個內容將這個僞造的畫布交給一個可能是任意的框架來後處理所有的line-,curve-和moveTo。僞造一幅畫布 - 可以工作嗎?
爲了解決這個問題,我嘗試了這個代碼,它實際上工作正常,但是我想知道在這次幸運的拍攝中我有多幸運。
(function(){
function DebugCanvas(){
this._dom = document.createElement('canvas');
addPropertiesToObject.call(this, this._dom);
this._fakeContext = null;
}
Object.defineProperties(DebugCanvas.prototype,
{
'constructor' : {
'value' : DebugCanvas,
'enumerable' : true
},
'getContext' : {
'value' : function(which){
var ctx;
if(which == '2d'){
if(this._fakeContext == null){
this._fakeContext = new FakeContext(this._dom);
}
ctx = this._fakeContext;
} else {
ctx = this._dom.getContext(which);
}
return ctx;
},
'enumerable' : true
}
}
);
function FakeContext(debugCanvas){
this._debugCanvas = debugCanvas;
this._realContext = debugCanvas._dom.getContext('2d');
addPropertiesToObject.call(this, this._realContext);
}
Object.defineProperties(FakeContext.prototype, {
'toString' : {
'value' : function(){
return '[Object FakeContext]';
},
'enumerable' : true
},
'canvas' : {
'get' : function(){
return this._debugCanvas;
},
'set' : function(c){ return },
'enumerable' : true
}
});
function addPropertiesToObject(from){
var description, obj;
for(var prop in from){
obj = from;
do {
if(obj.hasOwnProperty(prop) &&
!this.constructor.prototype.hasOwnProperty(prop)){
try{
description = Object.getOwnPropertyDescriptor(obj, prop);
Object.defineProperty(this.constructor.prototype, prop, description);
} catch(err){
this[ prop ] = from[ prop ];
}
break;
}
} while(obj = Object.getPrototypeOf(obj));
}
};
})()
的基本想法是,只要他們是複製所有的畫布,canvas.prototypes'(所有的鏈向上),上下文和context.prototypes'屬性假冒對象的原型中,不在那裏。
使用真正的畫布有什麼問題? – Kristian
»後處理所有繪圖命令«,這就是爲什麼。 – philipp