Вы можете хранить дескрипторы свойств контекста холста и переопределять нужные свойства / методы. это более сложный способ сделать почти то же, что и прокси.
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
var prototype = Object.getPrototypeOf(ctx);
var descriptors = Object.getOwnPropertyDescriptors(prototype);
Object.defineProperties(prototype, {
fillStyle: {
get() {
console.log("Getting fillStyle");
return descriptors.fillStyle.get.call(this);
},
set(value) {
console.log("Setting fillStyle to", value);
descriptors.fillStyle.set.call(this, value);
}
},
fillRect: {
value(x, y, w, h) {
console.log("Drawing rectangle", x, y, w, h);
return descriptors.fillRect.value.call(this, x, y, w, h);
}
}
});
var canvas2 = document.querySelector("canvas");
var ctx2 = canvas2.getContext("2d");
ctx2.fillStyle = "red";
//>> Setting fillStyle to red
ctx2.fillRect(10, 10, 100, 100);
//>> Drawing rectangle 10 10 100 100
<canvas id="canvas"></canvas>