Autor | Zpráva | ||
---|---|---|---|
KryVosa Profil |
#1 · Zasláno: 9. 5. 2016, 12:17:31
Dobrý den, mám zde další ze svých koumavých dotazů:
Chtěl bych nějak na prototyp pole navěsit, že když ho operátorem sčítání sečtete s jiným, sečtou se spolu jejich prvky: [0,5]+[4,5]==[4,10] //true PS: Já vím, můžu si udělat funkci funkce([0,5],[4.5]) , ale jde mi o jednoduchost použití a čitelnost kódu.
|
||
_es Profil |
#2 · Zasláno: 9. 5. 2016, 12:51:49
KryVosa:
„Jde to nějak?“ Nejde. Môžeš si napríklad do prototypu pridať nejakú vlastnú metódu a potom používať: pole3 = pole1.metóda(pole2) |
||
Radek9 Profil |
KryVosa:
V JS moc dobře nejde přetěžovat operátory (narozdíl třeba od C++). Pro aritmetické operace se na objektech volá metoda valueOf a s jejím výsledkem se potom pracuje. Jak radí _es, můžeš si udělat custom metodu na prototypu, nebo prostě použít existující metody jako např. map :
array1.map(function (val, key) { return val + array2[key]; }) S použitím arrow funkce je to o kousek kratší: array1.map((val, key) => val + array2[key]) |
||
KryVosa Profil |
#4 · Zasláno: 9. 5. 2016, 17:37:50
A všech výše zmíněných možnostech vím, zajímalo mě právě ono přetěžování operátorů. Každopádně děkuji.
|
||
Radek9 Profil |
#5 · Zasláno: 9. 5. 2016, 18:05:56
KryVosa:
U dynamicky typovaných jazyků by to byla trochu dvojsečná zbraň. Na jednu stranu by bylo fajn něco takového mít, ale na druhou stranu by to znamenalo hodně runtime checků, což může být dost drahé. U staticky typovaných jazyků (jako např. zmíněné C++) je to jednoduché. Tam se to prostě převede na volání příslušné funkce už pri kompilaci. Pokud tě to zajímá, tak v JS existuje ne úplně dobře podporovaný objekt Proxy, který dovoluje určitým způsobem přetížit aspoň nějaké operátory a volání nativních funkcí. |
||
Časová prodleva: 9 let
|
0