Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Web-программирование - это просто!


Новое на сайте Программирование - это просто! (www.easyprog.ru):

В платном разделе

В бесплатном разделе

Добрый день, уважаемые подписчики!

Тема сегодняшнего выпуска: «Java Script(JS): Библиотека визуальных компонентов. Методы базового класса».

 

В выпуске от 27.12.2010 вы уже познакомились с назначением методов базового класса библиотеки визуальных компонентов. Сегодня мы разберем их реализацию И так, начнем с метода _is_child:

 

function CXBrBaseInterfaceClass_is_child(a_class) {

    var str=typeof(a_class)

    if(str.toLowerCase()=="string") n_class=a_class; else n_class=a_class._get_class_name()

    return this._hierarchy_classes._search(n_class,this._hierarchy_classes.length-1)>-1

}

 

Как вы уже знаете, этот метод определяет, является ли класс дочерним от заданного. Как он это делает? Сначала узнаем тип переданного аргумента:

 

var str=typeof(a_class)

 

Если это строка, то проверяемый класс у нас этот аргумент, иначе это объект и нам надо взять имя класса этого объекта:

if(str.toLowerCase()=="string") n_class=a_class; else n_class=a_class._get_class_name()

  

ну а потом возвращаем  результат поиска в массиве иерархии классов:

return this._hierarchy_classes._search(n_class,this._hierarchy_classes.length-1)>-1

 

обратите внимание на метод _search. У стандартного объекта Array его нету. Поэтому в модуле XBrGlobalProc,js мы назначаем ему прототип:

// **************** Добавление прототипов стандартных классов *****************

Array.prototype._search=function Array_search(ob,len_arr) {

    if(len_arr==null) var l=this.length; else var l=len_arr

    for (var i = 0; i<l; i++) {

        if(this[i]==ob) return i;

        }

    return -1

}

 

В добавленном методе _search мы реализуем поиск в цикле. Один из аргументов данной функции - длина, в которой мы ищем. Тоесть, у нас массив имеет длину 100 элементов, но мы ищем только в 50-ти первых, например.  Если параметр опущен - ищем во всем массиве.

 

Разберем еще один метод _is_child_or_self:

function CXBrBaseInterfaceClass_is_child_or_self(a_class) {

    var str=typeof(a_class)

    if(str.toLowerCase()=="string") n_class=a_class; else n_class=a_class._get_class_name()

    return this._hierarchy_classes._search(n_class,null)>-1

}

 

Работает он аналогично, но, в отличии от _is_child поиск происходит во всем массиве, тоесть, проверка включает проверку самого себя, а в методе  _is_child - не включает.

 

Напоследок посмотрим как реализованы методы _is_parent и _is_parent_or_self:

function CXBrBaseInterfaceClass_is_parent_or_self(a_class) {

    return a_class._hierarchy_classes._search(this._get_class_name(),null)>-1

}

 

function CXBrBaseInterfaceClass_is_parent(a_class) {

    return a_class._hierarchy_classes._search(this._get_class_name(),a_class._hierarchy_classes.length-1)>-1

}

 

С уважением, Шуравин Александр, e-mail: megabax@rambler.ru, автор оставляет за собой право публиковать в рассылках ваши письма, если в письме прямо неоговорено нежелание его публиковать.

 


В избранное