Если вы посмотрите на него в каждом конкретном случае, возможно, некоторые реализации приемлемы.
blockquote>String.prototype.slice = function slice( me ){ return me; }; // Definite risk.
Перезаписывание уже созданных методов создает больше проблем, чем решает, что поэтому на многих языках программирования часто говорится об избежании этой практики. Как Devs узнали, что функция была изменена?
String.prototype.capitalize = function capitalize(){ return this.charAt(0).toUpperCase() + this.slice(1); }; // A little less risk.
В этом случае мы не перезаписываем какой-либо известный JS-метод ядра, но мы продолжаем String. Один из аргументов в этом сообщении упоминал, как новый разработчик знает, является ли этот метод частью ядра JS или где найти документы? Что произойдет, если основной объект JS String должен получить метод с именем capitalize?
Что делать, если вместо добавления имен, которые могут столкнуться с другими библиотеками, вы использовали модификатор компании / приложения, который все разработчики могли понимаете?
String.prototype.weCapitalize = function weCapitalize(){ return this.charAt(0).toUpperCase() + this.slice(1); }; // marginal risk. var myString = "hello to you."; myString.weCapitalize(); // => Hello to you.
Если вы продолжаете распространять другие объекты, все разработчики столкнутся с ними в дикой природе (в данном случае) мы, которые уведомили бы их, что это расширение для компании / приложения.
Это не устраняет коллизий имен, но уменьшает возможность. Если вы определите, что расширение основных объектов JS для вас и / или вашей команды, возможно, это для вас.
Я добавил здесь код http://code.google.com/p/canvasimagegradient/ , который добавляет функцию drawImageGradient в CanvasRenderingContext2D. Вы можете нарисовать изображение с линейным или радиальным градиентом. Он не работает в IE даже с excanvas из-за отсутствия поддержки getImageData / putImageData.
Следующий код, например, будет рисовать изображение с радиальным градиентом (извлечение контекста и загрузка изображения не показаны):
var radGrad = ctx.createRadialGradient(
img.width / 2, img.height / 2, 10,
img.width / 2, img.height / 2, img.width/2);
radGrad.addColorStop(0, "transparent");
radGrad.addColorStop(1, "#000");
ctx.drawImageGradient(img, 112.5, 130, radGrad);
Код работает следующим образом:
Очевидно, что производительность становится проблемой, поскольку изображения становятся больше. Изображение на http://code.google.com/p/canvasimagegradient/ рисуется примерно за 6-10 мсек. Изображение 1024x768 занимает от 100 до 250 мсек. Тем не менее, можно использовать до тех пор, пока вы не анимируете.
Если вам нужно сделать изображение прозрачным, установите ctx.globalAlpha
в то значение, которое вам нужно (по умолчанию 1, без прозрачности). Затем сбросьте это значение после того, как нарисуете изображение. Возможно, поможет и этот URL https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Canvas_tutorial/Compositing.