我正在尝试将功能(新方法)添加到内置对象(在我的例子中,类型为 CanvasRenderingContext2D)。
第一种方法是将方法添加到原型中,它可以工作,但我不想修改内置对象。
我正在考虑使用 Object.create(来自 ES5)来扩展对象,例如Object.create(context, <my_method_descriptors>)
,但是在访问扩展对象的属性/调用方法时,它在某些浏览器上失败。例如,这个片段
var canvas = document.getElementById("mainCanvas");
var context = canvas.getContext('2d');
var exContext = Object.create(context);
try {
exContext.fillStyle = 'red';
exContext.fillRect(0, 0, 120, 120);
} catch (e) {
alert(e);
}
在 IE9 Beta 和 Safari 5 上会失败,但在 Firefox 4 Beta 和 Chrome 7 上会成功。
另一个例子:Object.create(new Date()).getDate()
在所有浏览器中都失败。
有什么想法吗?