Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.02.2012, 17:35
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

javascript Harmonia и Proxy
HarmoiaHarmony гармония блинXD

Что думаете по этому поводу? Это же жесть как мощно!
https://developer.mozilla.org/en/Jav..._Objects/Proxy

Последний раз редактировалось Mахmахmахimus, 13.02.2012 в 17:56.
Ответить с цитированием
  #2 (permalink)  
Старый 13.02.2012, 19:15
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

А __noSuchMethod__ так и остался нестандартным?
Ответить с цитированием
  #3 (permalink)  
Старый 13.02.2012, 19:48
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

хз но пока это всего лишь черновик
Ответить с цитированием
  #4 (permalink)  
Старый 13.02.2012, 22:49
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

что такое __noSuchMethod__ ?
Ответить с цитированием
  #5 (permalink)  
Старый 15.02.2012, 04:36
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Mахmахmахimus
что такое __noSuchMethod__ ?
Это метод объекта, который вызывается, когда пытаются вызвать несуществующий метод.
https://developer.mozilla.org/en/Jav...t/NoSuchMethod

({
   __noSuchMethod__: function(meth, args){
      //обработчик: meth === 'method', args ~ [1,2,3]
  }
}).method(1,2,3); //не выдаст ошибки


В общем, не нашел чего-то очень полезного. Хотя я и не сильно углублялся.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности

Последний раз редактировалось FINoM, 15.02.2012 в 14:01.
Ответить с цитированием
  #6 (permalink)  
Старый 15.02.2012, 14:03
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

Сообщение от FINoM
Это метод объекта, который вызывается, когда пытаются вызвать несуществующий метод.
ты правда не видишь в этом ни чего полезного? По мне так вообще странно что это не стандартно, я думал почему то что такая ловушка есть уже.
Ответить с цитированием
  #7 (permalink)  
Старый 15.02.2012, 14:18
Аватар для FINoM
Новичок
Отправить личное сообщение для FINoM Посмотреть профиль Найти все сообщения от FINoM
 
Регистрация: 05.09.2010
Сообщений: 2,298

Сообщение от Mахmахmахimus
ты правда не видишь в этом ни чего полезного? По мне так вообще странно что это не стандартно, я думал почему то что такая ловушка есть уже.
Нет, эта вещь крутая, я о прокси.
__________________
"Matreshka is fucking awesome" © чувак с Reddit
Matreshka.js - Три возможности
Ответить с цитированием
  #8 (permalink)  
Старый 15.02.2012, 15:40
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Mахmахmахimus
По мне так вообще странно что это не стандартно, я думал почему то что такая ловушка есть уже.
Это не так легко воткнуть в семантику JavaScript-а. В каких случаях должна вызываться ловушка? Когда у самого объекта нет искомого свойства? Или такого свойства нет во всей цепочке его прототипов? И почему именно так, а не иначе? У обоих вариантов есть и плюсы, и минусы.
Ответить с цитированием
  #9 (permalink)  
Старый 15.02.2012, 15:48
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

Сообщение от Kolyaj
В каких случаях должна вызываться ловушка? Когда у самого объекта нет искомого свойства? Или такого свойства нет во всей цепочке его прототипов?
Это уже пользователю решать, я же про прокси говорю, прокси использует ловушки.. Там можно смотреть обратились ли к свойству или нет и перехватывать это ловушкой. Но там вроде нельзя определить собираются ли вызывать это свойство как функцию.

Но если бы была такая ловушка(а что её нет я не уверен), можно сделать так же как и в случае с обычным доступом к свойству. Смотреть есть ли оно в нужном обьекте, если нет, то при желании можно сделать запрос к цепочке прототипов и посмотреть там. это я думаю не проблема.

Последний раз редактировалось Mахmахmахimus, 15.02.2012 в 15:51.
Ответить с цитированием
  #10 (permalink)  
Старый 16.02.2012, 16:03
Профессор
Посмотреть профиль Найти все сообщения от Mахmахmахimus
 
Регистрация: 10.02.2012
Сообщений: 254

Эмуляция __noSuchMethod__

Используя Прокси возможно эмулировать хук __noSuchMethod__ в тех браузерах, которые его не поддерживают (но сейчас это не актуально).
function MyObject() {};
MyObject.prototype = Object.create(NoSuchMethodTrap);
MyObject.prototype.__noSuchMethod__ = function(methodName, args) {
  return 'Hello, '+ methodName;
};

new MyObject().foo() // returns 'Hello, foo'


Этот объект использует NoSuchMethodTrap-прокси в котором ловушка get заменяет оригинальный __noSuchMethod__.
var NoSuchMethodTrap = Proxy.create({
  get: function(rcvr, name) {
    if (name === '__noSuchMethod__') {
      throw new Error("receiver does not implement __noSuchMethod__ hook");
    } else {
      return function() {
        var args = Array.prototype.slice.call(arguments);
        return this.__noSuchMethod__(name, args);
      }
    }
  }
});

Последний раз редактировалось Octane, 16.02.2012 в 16:23.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 14:23
javascript вставки в vrml сцены. Передать событие из броузера Proletariy Javascript под браузер 0 10.05.2011 11:26
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 18:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 19:34
JavaScript на Яндекс.Фотки - почему тормозит браузеры? ZavFirefox Javascript под браузер 23 27.09.2009 18:24