|    | 
СИ-БИ техника | КВ техника | УКВ техника | Радиоизмерения | Защита от TVI | Источники питания | Софт | Расчеты | Справочники
Главная arrow Программирование arrow Java arrow Как вызвать метод объекта-предка из метода объекта-потомка?  

Как вызвать метод объекта-предка из метода объекта-потомка?

Проблема

Есть пользовательский объект, созданный на основе другого объекта. Этот объект содержит метод, унаследованный от объекта-предка, но переопределенный в его собственной реализации. (Как мы уже знаем, это достигается присвоением другой функции соответствующему свойству объекта-потомка.) Можно ли из переопределенного метода потомка как-то вызвать изначальный метод предка?

Решение

Одно из ограничений языка JavaScript — невозможность стандартными средствами обратиться к изначальному методу объекта-предка из переопределенного метода потомка. Однако можно использовать несложный трюк, описанный далее.

1.  В определении объекта-потомка создаем еще одно свойство и называем его, скажем, ПО такой схеме: <Имя объекта-предка>_<Имя переопределяемого метода>.

2.  Присваиваем этому свойству значение свойства, соответствующего переопределяемому методу.

3.   Присваиваем свойству, соответствующему переопределяемому методу, функцию, содержащую новую реализацию этого метода.

4.  Если нам понадобится обратиться к изначальному методу предка, мы просто вызываем его, пользуясь созданным ранее свойством <Имя объекта-

предка>_<Имя переопределяемого метода>.

Пример

Давайте перепишем определение объекта point2 так, чтобы функция fsetcoords2, заносящая в свойства х и у значения координат, использовала для этого "старую" функцию fsetcoords.

// Объявление функции-конструктора объекта Point2 function Point2(ix, iy, icolor) {

this.base = Point; this.base(ix, iy) ; this.color = icolor;

this.Point_setCoords = this.setCoords; this.setCoords = fSetCoords2; }

// Выражение, делающее объект Point предком объекта Point2 Point2.prototype = new Point;

// Объявление функции, реализующей метод setCoords объекта Point2 function fSetCoords2(ix, iy) {

this.Point_setCoords(ix, iy); this.color = 0; }

Народ советует

Несмотря, скажем так, на особенности реализации в JavaScript, использование изначальных методов объектов-предков может сильно упростить код методов объектов-потомков. Тем более что полностью изменять реализацию переопределяемых методов приходится очень редко — чаще их нужно только слегка подправить.

Как добавить новые свойства и методы в уже существующий объект?

Проблема

Я написал отличную функцию по работе со строками. Нельзя ли добавить ее к уже существующему объекту string в качестве метода?

Решение

Ничего нет проще! Синтаксис создания нового свойства или метода для уже существующего объекта таков:

<Объект>.prototype.<Имя свойства> = <3начение свойства>;

<Объект>.prototype.<Имя метода> = <Функция, реализующая этот метод>;

Народ предупреждает!

Описанным выше способом можно добавить новые свойства и методы только во встроенные объекты JavaScript (Number, string, Object и пр.). Объекты Web-обозревателя (document, window, navigator и пр.) таким образом расширить нельзя.

Пример

Далее в этой книге будут приведены листинги методов trimLeft и trimRight, удаляющие из строк начальные и конечные пробелы соответственно. Для добавления этих методов к объекту string были использованы следующие выражения:

String.prototype.trimLeft = mjspsTrimLeft; String.prototype.trimRight = mjspsTrimRight;

Здесь mjspsTrimLeft и mjspsTrimRight— функции, реализующие эти методы (они будут описаны далее).

Как в теле метода, добавленного к объекту String, Number или Boolean, получить доступ к значению этого объекта?

Проблема

Я пишу метод, который собираюсь добавить к стандартному объекту JavaScript (string, Number или Boolean). Как мне в этом методе получить текущее значение этого объекта (строку, число или логическую величину)?

Решение

Общий формат выражения для получения текущего значения стандартного объекта JavaScript в теле метода этого объекта таков:

<Переменная> = new <Имя стандартного объекта>(this);

Пример

Вот фрагмент объявления функции, которая впоследствии станет методом объекта Number: function mSomeMethod() {

var objValue = new Number(this);

}

В результате вычисления приведенного выше единственного выражения в переменной objvalue окажется числовое значение, содержащееся в экземпляре объекта Number, т. е. в числовой переменной.



RLBN.ru - Электроника и компьютеры

0.1579
Hosted by uCoz