В javascript можно как добавлять новые методы к классу, так и заменять существующие на новые. Причем изменения коснутся всех экземпляров класса. (Подробнее см.
здесь.) Так же можно подменить метод для конкретного объекта, а на классе это не отразится.
Рассмотрим типовую задачу - отлов события начала загрузки данных в протоколе WFS.
Пусть имеется контроллер GetFeature, который по щелчку мышки на карте запрашивает по WFS объекты, попавшие в район щелчка:
Код: Выделить всё
var ctrlGetFeature = new OpenLayers.Control.GetFeature({
protocol: new OpenLayers.Protocol.WFS({
version: '1.0.0',
...
}),
box: true
});
Поскольку процедура долгая, то хотелось бы проинформировать пользователя (показать индикатор, песочные часы и т.п.) о начале загрузке и об окончании. Завершение процедуры можно узнать по событию "featureselected":
Код: Выделить всё
ctrlGetFeature.events.register("featureselected", this, function () {
alert("Приехали");
});
А вот начало поймать сложнее. В протоколе OpenLayers.Protocol.WFS в методе read не предусмотрена активация событий. (В базовом классе OpenLayers.Request их также нет.) Поэтому переопределим в объекте ctrlGetFeature метод request на новый и потом вызовем настоящий из класса:
Код: Выделить всё
ctrlGetFeature.request = function(bounds, options) {
alert("Трогай, сказала Кэт...");
OpenLayers.Control.GetFeature.prototype.request.call(this, bounds, options);
}
Как вариант, можно было переопределить метод для всего класса GetFeature или WFS. Но тогда придется переписать заменяемую функцию полностью.