Autor | Zpráva | ||
---|---|---|---|
jirka2 Profil |
#1 · Zasláno: 13. 2. 2020, 13:40:42
Ahoj,
mám začátečnický problém, viz tento jednoduchý funkční skript: function fce() { return {z:1}; } var a = fce(); function fce(x) { x = {z:1}; } var a = {}; fce(a); return .
díky |
||
Kcko Profil |
#2 · Zasláno: 13. 2. 2020, 16:26:53
Protože funkce by měla vždy vracet hodnotu. Půjde to když si proměnnou nadefinuješ jako globální, tj nad kontextem přes var
Nicméně, uniká mi čeho chceš docílit. Vložíš do funkce prázdný objekt a v něm je proměnná x, ve které bude ten objekt který si ve funkci nastavil. Nic se Ti nepřepíše. O co se snažíš? |
||
jirka2 Profil |
#3 · Zasláno: 13. 2. 2020, 17:00:06
Kcko:
Díky za radu, ono je to brutálně zjednodušené. Podstata byla, že jsem po úspěšném volání ajaxu vytvářel objekt (s parametry získanými díky ajaxu). Nakonec jsem využil, že jde toto: function fce(x) { x.b = {z:1}; } var a = {}; fce(a); |
||
Kcko Profil |
#4 · Zasláno: 13. 2. 2020, 17:29:33
takto bys to řešit neměl, měl bys to mít resene v nejakem success callbacku po vykonani ajaxu. Dřív nebo později te to dozene. ať uz v nefunkčnosti nebo neprehlednosti.
|
||
Radek9 Profil |
#5 · Zasláno: 13. 2. 2020, 20:00:46
jirka2:
Jde v zásadě o to, že ta proměnná x je lokální pro funkci fce . Tím, že do ní uložíš jiný objekt (resp. referenci na ten objekt), nijak neměníš původní objekt, který v ní byl uložený. Jinými slovy jen v proměnné vyměníš jednu referenci za jinou.
Postup, který uvádíš v [#3] je validní. Pokud bys chtěl objekt rošířit o více vlastností najednou, můžeš použít Object.assign :
function fce(x) { Object.assign(x, { y: 2, z: 1 }); } var a = { x: 5, z: 0 }; fce(a); // v a je nyní { x: 5, y: 2, z: 1 } |
||
Časová prodleva: 4 roky
|
0