Я пытаюсь добавить функциональность (новые методы) во встроенный объект (в моем случае, типа CanvasRenderingContext2D).
Первый подход состоял в том, чтобы добавить методы к прототипу, он работает, но я бы предпочел не изменять встроенные объекты.
Я думал использовать Object.create (из ES5) для расширения объекта, что-то вроде Object.create(context, <my_method_descriptors>)
, однако в некоторых браузерах происходит сбой при доступе к свойствам / вызову методов для расширенного объекта.Например, этот фрагмент
var canvas = document.getElementById("mainCanvas");<br>
var context = canvas.getContext('2d');<br>
var exContext = Object.create(context);<br>
try {<br>
exContext.fillStyle = 'red';<br>
exContext.fillRect(0, 0, 120, 120);<br>
} catch (e) {<br>
alert(e);<br>
}
завершится с ошибкой в IE9 Beta и Safari 5, но завершится успешно в Firefox 4 Beta и Chrome 7.
Другой пример: Object.create(new Date()).getDate()
не работает во всех браузерах.
Есть мысли?