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
вполне возможно скоро появится в хроме, а вот с остальными браузерами да печально..

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


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