組み込みオブジェクト(私の場合は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ベータ版とSafari5では失敗しますが、Firefox4ベータ版とChrome7では成功します。
別の例:Object.create(new Date()).getDate()
すべてのブラウザーで失敗します。
何かご意見は?