Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Перехват вызова несуществующего метода класса (https://javascript.ru/forum/events/29927-perekhvat-vyzova-nesushhestvuyushhego-metoda-klassa.html)

bartwell 17.07.2012 15:13

Перехват вызова несуществующего метода класса
 
Возможно ли в Javascript перехватить вызов несуществующего метода? Например, в PHP для этого имеется "магический" метод __call(). А как это реализовать в JS?

oneguy 17.07.2012 15:16

Цитата:

Сообщение от bartwell (Сообщение 189501)
Возможно ли в Javascript перехватить вызов несуществующего метода?

К сожаленью, нет :(

devote 17.07.2012 15:27

Ждем Proxy

cyber 17.07.2012 15:50

а почему бы не так

<!DOCTYPE HTML>
<html>
  <head> </head>
  <body>

    <script>

      function __call(obj){
      
        try{
        
         obj();
        } catch(e){
        
          alert('такого метода нет');
         
        }
      
      }
      
      var O = {
        new_ :function (){
        
          alert('new');
        }
      };
  __call(O.new_);
      
  __call(O.bla);    
    </script>

  </body>
</html>

bartwell 17.07.2012 16:37

cyber, спасибо за вариант. К сожалению, мне этот метод не подходит - методы должны вызываться как обычно, т.е., просто class.method();

cyber 17.07.2012 16:40

ну на сколько я знаю такое не возможно на js ,если я ошибаюсь поправьте

bartwell 17.07.2012 16:44

Печально. Но, спасибо всем за ответы. Буду искать другое решение.

devote 17.07.2012 20:33

Цитата:

Сообщение от cyber
ну на сколько я знаю такое не возможно на js ,если я ошибаюсь поправьте

такое возможно, но только в FF используя объект Proxy, в других браузерах пока этого нет. Proxy добавлен в спецификацию ES6 поэтому ждать боюсь еще прилично придется.

cyber 17.07.2012 21:10

Цитата:

Сообщение от devote (Сообщение 189568)
такое возможно, но только в FF используя объект Proxy, в других браузерах пока этого нет. Proxy добавлен в спецификацию ES6 поэтому ждать боюсь еще прилично придется.

вполне возможно скоро появится в хроме, а вот с остальными браузерами да печально..

devote 17.07.2012 22:10

Цитата:

Сообщение от cyber
вполне возможно скоро появится в хроме, а вот с остальными браузерами да печально..

ну оно еще в черновиках, толком еще не допилено.. сомневаюсь что хром это внедрит в ближайшее время. Так как им часто придется переделывать из-за изменений в спецификации, пока черновик во что-то дельное не превратится.

cyber 17.07.2012 22:55

Цитата:

Сообщение от devote (Сообщение 189592)
ну оно еще в черновиках, толком еще не допилено.. сомневаюсь что хром это внедрит в ближайшее время. Так как им часто придется переделывать из-за изменений в спецификации, пока черновик во что-то дельное не превратится.

сначала в chromium появится ИМХО

Aetae 18.07.2012 04:37

Ну в принципе наверное можно с кучей ограничений через window.onerror зафигачить.)
Но это просто извращение.)

devote 18.07.2012 08:01

Цитата:

Сообщение от Aetae
Ну в принципе наверное можно с кучей ограничений через window.onerror зафигачить.)

ага, вот тока как понять что и к какому объекту было обращение? window.onerror совсем никакой существенной инфы не выдает.

Раед 19.07.2012 02:52

__noSuchMethod__
FF only :(

devote 19.07.2012 03:07

Цитата:

Сообщение от Раед
__noSuchMethod__
FF only

я уже упоминал об этом выше, это относится к Proxy и доступен он лишь в ФФ

Раед 19.07.2012 03:18

Цитата:

Сообщение от devote
это относится к Proxy

Proxy - специальный объект, а __noSuchMethod__ может быть у любого объекта.
Также __noSuchMethod__ реагирует только на методы, а Proxy, на сколько мне известно, на любые свойства.

devote 19.07.2012 03:28

Раед,
да ты не понял, я имею ввиду о том что это относится к прокси... То-есть это не отдельная реализация, а часть прокси


Часовой пояс GMT +3, время: 19:28.