Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Переопределение метода у Array


Автор: setnull 14.4.2010, 16:30
Все здравствуйте!

Добавляю в класс Array свой метод

Код

Array.prototype.myMethod = function(){
........
}

После чего, если массивом пользоваться как ассоциативным, то myMethod попадает в перечисление ключей в конструкции
Код

for(key in myArray)


Как скрыть мой метод во множестве ключей?

Спасибо!!!

Автор: rabbitObject 14.4.2010, 17:16
Код

for (var k in myArray) {
    if (myArray.hasOwnProperty(k)) {
        // здесь твой метод не появится
    }
}


Автор: setnull 15.4.2010, 11:26
спасибо.
а покрасивше никак, чтоб вообще метод и не перечислялся оператором in?
сам метод как-то пометить, по-другому объявить?
join и indexof, например, не попадают же изначально.

Автор: cha0t1k 15.4.2010, 13:45
Как вариант написать свои методы итераторов, как сделали разработчики Prototype, и в самом методе уже фильтровать что не должно попадать в выдачу.

Автор: setnull 20.4.2010, 10:39
во-во-во...
а как его зовут и как это вообще сделать?
это в смысле _iterator_next() (как то там...) и _iterator_exception?
ведь если я в нем напишу 
Код

for(element in this)

оно же зациклится?

Добавлено @ 10:43
или я вообще его не буду реализовывать, а заверну его в фильтрующий метод?

Код

var prevCode =Array.prototype._iterator_next;
Array.prototype._iterator_next =functino(){
   var res;
   do{
      res=prevCode.call(this);
   }while(!this.isMyPrivatMemeber(res));
   return res;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)