Javascript Ve Referans Olayı
-
selams gençler
şimdi javascriptteki = objelerde referans olarak atadığı için bir değer değiştirince zincirleme her bok değişiyor.
atıyorum.
var a = {name: 'ahmet'}
var b = a
b.name = "mehmet"
simdi a.name de mehmet oldu :P
ben bunu aşmak için jsonluyorum veriyi. şöyle ki : var b = JSON.parse(JSON.stringify(a))
yapıyorum :Pneden böyle bir şeye ihtiyaç duyuyorum ? bir array var, içinde bir tablodaki satırlar var. bir satırı klonla dediğinde kullanıcı o satırdaki verileri alıp sonuna ekliyorum arrayın.
tamam yaptım çalışıyo falan ama bu olay bana çok amelece geliyo. bunun doğrusu nedir ? siz nasıl yapıyorsunuz ?
googleda aratınca çıkan linkleri atmayın lütfen hepsine baktım, nasıl yapılır diye sormuyorum, çözdüm zaten. daha güzel bir yöntem varmı, saçma bişey mi yapıyorum diye soruyorum. bulduğum en relax yöntem json olayı (javascript için json çözmek baya hızlı bişey )
yolbulucu tarafından 04/Şub/21 11:24 tarihinde düzenlenmiştir -
var a = {name:" ahmet", surname: "yolbulucu", site:"tahribat"}; var b = $.extend(true,{},a); b.name="mehmet"; b.site="google.com"; console.table(a); console.table(b);
javascript pek bilmiyorum hocam.
Ama arama yapınca buradaki yöntemlerden jquery'li olanı denedim, sanırım oldu sende bir kontrol edersin;
https://stackoverflow.com/a/12690181/5646313
edit:
birde https://api.jquery.com/jquery.extend/ burda kopyalanan objelerin property si null veya
undefined
ise kabul edilmez gibi bir şey yazmış hocam eğer daha önce deneysen bunu sorun buysa bundanda kaynaklanıyor olabilir. -
Https bunu yazdı
var a = {name:" ahmet", surname: "yolbulucu", site:"tahribat"}; var b = $.extend(true,{},a); b.name="mehmet"; b.site="google.com"; console.table(a); console.table(b);
javascript pek bilmiyorum hocam.
Ama arama yapınca buradaki yöntemlerden jquery'li olanı denedim, sanırım oldu sende bir kontrol edersin;
https://stackoverflow.com/a/12690181/5646313
edit:
birde https://api.jquery.com/jquery.extend/ burda kopyalanan objelerin property si null veya
undefined
ise kabul edilmez gibi bir şey yazmış hocam eğer daha önce deneysen bunu sorun buysa bundanda kaynaklanıyor olabilir.ilk mesajı editledim hocam, bold kısma bakabilirsin .
-
Şuraya baktınız mı? https://stackoverflow.com/questions/12690107/clone-object-without-reference-javascript
Olay şu: primitif tipler (string, sayı) kopyalanarak aktarılıyor. Sıkıntı yok. Nesneler ve diziler ise referansı ile aktarılıyor. Sorun burada başlıyor. var a = birseyler; var b = a; dediğin anda aslında a ve b aynı nesneyi gösteriyor (name: 'ahmet' olan nesne). aslında a ve b sadece bilinmez bir nesneye atadığın referans. a ve b eşit olduğu ve aynı şeyi gösterdiği için, yaptığın değişiklikler ikisinde de geçerli oluyor.
Not: Aslında hep değeri ile aktarılıyor. Fakat nesnelerin değeri referans. Yani referans kopyalanıyor. Bu bağlamda aynı Java gibi davranıyor. Kaynak: https://stackoverflow.com/questions/518000/is-javascript-a-pass-by-reference-or-pass-by-value-language
Sizin çözüm doğru. Performans cezalı ama doğru.
-
https://www.samanthaming.com/tidbits/70-3-ways-to-clone-objects/
benim en sevdiğim "let a = {...b}" Json a cevirmek de hızlıdır ama buna göre daha maliyetli bir yönetm sonuçta.
-
https://developer.mozilla.org/tr/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
sen abine sorsana böyle şeyleri ya.
-
rakkoc bunu yazdı
https://www.samanthaming.com/tidbits/70-3-ways-to-clone-objects/
benim en sevdiğim "let a = {...b}" Json a cevirmek de hızlıdır ama buna göre daha maliyetli bir yönetm sonuçta.
ben bunu bilmiyodum ya çözüyomuş benim işi eyvallah abi.
-
Nested objeleri clonelarken üstteki yöntemler yemeyebilir check edin derim
-
yamulmuyorsam temelde pass by value, pass by reference olayindan kaynaklaniyor. bunun uzerinden temeline inip js in yorumlanirken hangisini nerede kullandigini ogrenirsen temelini kavramis olursun.
-
rakkoc bunu yazdı
https://www.samanthaming.com/tidbits/70-3-ways-to-clone-objects/
benim en sevdiğim "let a = {...b}" Json a cevirmek de hızlıdır ama buna göre daha maliyetli bir yönetm sonuçta.
Olay budur. Alternatifi olarak object.assign var bir de.
Spread operatoru diye aratırsan bulursun buradaki kullanımı.
Haricen, object/array destruction diye de aratırsan hoş şeyler öğrenmiş olursun :)
-
makets bunu yazdı
Nested objeleri clonelarken üstteki yöntemler yemeyebilir check edin derim
Yer hocam niye yemesin. Shadow değil baya baya hard copy yapıyorlar.