Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Перегрузка операторов + - и других (https://javascript.ru/forum/misc/7139-peregruzka-operatorov-i-drugikh.html)

mycoding 17.01.2010 21:06

Перегрузка операторов + - и других
 
Есть ли в javascript-e возможность перегружать операторы + - и другие?

Kolyaj 17.01.2010 21:09

Нет.

mycoding 17.01.2010 21:43

А жаль, эхххххххх......

moron 17.06.2014 22:09

Прошу прощения за некропост.
Я тоже считал, что нет, но наткнулся на это http://www.2ality.com/2011/12/fake-o...erloading.html - спешу поделиться.

Sweet 17.06.2014 23:27

moron, изложи тут суть в кратце, а то я, например, не перехожу по всяким непонятным ссылкам. Там не про .valueOf?

Aetae 17.06.2014 23:37

moron, это так - шуточки чтоб сломать мозги новичку. На деле неюзабельно.)

moron 18.06.2014 01:17

Цитата:

На деле неюзабельно
Факт в том, что это есть, а юзкейс можно придумать.
Цитата:

Там не про .valueOf?
Оно, но до определения операторов я бы наврят ли сам дошел, а уж до git:jsDecorators или git:jsPipe - никогда в жисти.
Цитата:

изложи тут суть в кратце
В статье опператоры определяются следующим образом:
1) переопределяется метод valueOf так, что каждый обьект возвращает примитив 3, а так же пушит в массив операндов. Пример: point1+point2+point3 //=9 где point[1-3] обьекты стр.15-20
2) в итоге при разных операторах итоговых результат будет разный
3) дальше в игру вступают некросбраузерные, но безумно сладкие штуки defineProperty(ie8+) и нативный сетер(ie9+). стр.21 Нативный сеттер получает значение, представим: obj1+obj2+obj3 даст нам 9, а еще мы знаем количество операндов, определить что за оператор был не составит труда. стр.22-33
4) юзаем соотв. ф-юю. стр.38
Можно посмотреть так же в код jsPipe и jsDecorator(ссылки выше) - он простой, но это меня просто приятно удивило.
--
upd Но есть проблема: point1+point2-point3 он уже распарсит неверно :( Вроде...
upd2 Видимо в этом действительно нет ничего особенного - моя радуга куда-то ушла.


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