DEV Community

Operator Overloading in JavaScript, yes you can!

Adam Crockett 🌀 on January 07, 2020

It struck me that it would be nice to have some form of ByteString in JavaScript utilizing TextEncoder but instead of having some fancy newing up a...
Collapse
 
drsensor profile image
૮༼⚆︿⚆༽つ

I wonder if it still work for vector operation 🤔

Collapse
 
adam_cyclones profile image
Adam Crockett 🌀

I thought about it again, I remember the problem with vector 3 or vector 4 sizes, you need to retain all 4 or 3 values and represent them as a type in such a way that the plus can be used, eg string and number, and then re translate them back to vectors again, it sounds like a fun challenge, let me know if you try it

Collapse
 
adam_cyclones profile image
Adam Crockett 🌀

It has been a long time but I think I have a vector implementation

Collapse
 
drsensor profile image
૮༼⚆︿⚆༽つ • Edited

How do you detect what kind operation it is (e.g +, *) by just listening on valueOf()?

Thread Thread
 
adam_cyclones profile image
Adam Crockett 🌀

Here we go, the very technical details
2ality.com/2011/12/fake-operator-o...

Thread Thread
 
adam_cyclones profile image
Adam Crockett 🌀

Details of that are here 2ality.com/2011/12/fake-operator-o...

Thread Thread
 
drsensor profile image
૮༼⚆︿⚆༽つ • Edited

Unfortunately that technique is bound to fail when each expressions executed asynchronously. I think there is need a way to mark or even better get the value of the right hand side of the operator 🤔

Thread Thread
 
adam_cyclones profile image
Adam Crockett 🌀

I'm afraid at that point in the article, I reached my limit of comprehension, my attention span crumbled into little pieces of biscuits 😎. I did stumble across a method using Proxy, I know the reality breaking power of Proxy, so I suspect it may be the way to go. If you try to solve this one, I would like to see the results. But I can tell you that NPM does have this problem solved in the form of a few packages, some compiling and some runtime, best of luck my friend

Thread Thread
 
drsensor profile image
૮༼⚆︿⚆༽つ

At least it doesn't do any string operation. Another approach is to use either tagged-template-literal or JSX but it hit perf quite bad since it need to translate math ops that is in string into the real one (e.g "+" -> +). This is a big no for gamedev. The solution is to use babel-macro but it slow down the devserver since it depend on babel. I wish esbuild support macro or there is a go esbuild-plugin for this.
Sorry for the rambling. Best luck to us 😃

Collapse
 
delta456 profile image
Swastik Baranwal

You wrote Oporator instead of Operator.

Collapse
 
adam_cyclones profile image
Adam Crockett 🌀

Dyslexia, so I meant whatever 😁

Collapse
 
diek profile image
diek

Oporator it's really nice, I will call oporator to all my tests of this kind of weirdo programming. Ty for inspiring me xD

Thread Thread
 
adam_cyclones profile image
Adam Crockett 🌀

You are most welcome 🤪

Collapse
 
pyrocto profile image
Mike Stay

You might enjoy this, then:
reperiendi.wordpress.com/2020/08/3...

Collapse
 
jonrandy profile image
Jon Randy 🎖️

ooooooh!