php.de

Zurück   php.de > Webentwicklung > JavaScript, Ajax und mehr

JavaScript, Ajax und mehr dynamisches Scripten und Interaktion auf Clientebene

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.06.2010, 14:37  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard Objekt-Klon statt Referenz

Tach, folgender Code funktioniert nicht, wie er auf den ersten Blick zu arbeiten scheint:

Code:
function foo (preset)
  {
  var out = preset;
  out.a = 5;
  }


var inp = { test: 'test'};

console.log (inp);  // {test: 'test'}

outp = foo (inp);

console.log (inp);  // {test: 'test' , a: 5}
var out = preset; kopiert hier die gesamte Instanz, statt nur die Werte und ändert damit auch das Ausgangsobjekt bei jeder Operation auf die neue Variable.

Mein aktueller "Workaround" sieht so aus (jQuery):

Code:
function foo (preset)
  {
  var out = jQuery.extend ({} , preset);
  out.a = 5;
  }
Der hat allerdings einen Schönheitsfehler: extend() schmeißt alle Properties aus dem Objekt, die auf "undefined" gesetzt sind. Im Normalfall vertretbar, nur nicht, wenn man die Namen der Objektproperties bspw. per Schleife auswerten will.

Nun die Frage:
Gibt es eine native JS-Variante, um einen Objektklon mit allen seinen Properties zu erzeugen?

Danke an alle Javascript-Gurus.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.06.2010, 14:58  
Erfahrener Benutzer
 
Registriert seit: 01.12.2009
Beiträge: 645
PHP-Kenntnisse:
Fortgeschritten
draco88 befindet sich auf einem aufstrebenden Ast
draco88 eine Nachricht über ICQ schicken
Standard

In Prototype gibts eine ähnliche funktion, wie bei jQuery. Hier sollten allerdings auch undefined Werte kopiert werden.

PHP-Code:
Object.extend = function(destinationsource) {
  for (var 
property in source)
    
destination[property] = source[property];
  return 
destination;
}; 
draco88 ist offline   Mit Zitat antworten
Alt 02.06.2010, 15:03  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Stimmt schon, das geht natürlich auch. Hatte gehofft, das geht noch etwas "freakiger".
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 02.06.2010, 15:14  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Bei näherer Betrachtung gefällt mir die Lösung doch ganz gut. Danke.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 02.06.2010, 17:33  
Moderator¹
 
Registriert seit: 28.03.2010
Beiträge: 7.470
PHP-Kenntnisse:
Fortgeschritten
ChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer AnblickChrisB ist ein wunderbarer Anblick
Standard

Zitat:
Zitat von nikosch Beitrag anzeigen
var out = preset; kopiert hier die gesamte Instanz, statt nur die Werte und ändert damit auch das Ausgangsobjekt bei jeder Operation auf die neue Variable.
Objekte werden in JavaScript immer per Referenz übergeben.
Und alles ausser den primitiven Datentypen ist ein Objekt.
__________________
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
ChrisB ist offline   Mit Zitat antworten
Alt 02.06.2010, 21:20  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
Objekte werden in JavaScript immer per Referenz übergeben.
Und alles ausser den primitiven Datentypen ist ein Objekt.
Ist mir ja bewußt. Ich wurde nur schmerzlich daran erinnert, dass dies dann auch für das Feedback gilt. Im Nachhinein ja logisch, aber da in JS so gut wie alles ein Objekt ist, ist es schwer überhaupt mit Parametern zu arbeiten, ohne dass das einen Seiteneffekt auf den aufrufenden Kontext hat:

PHP-Code:
function foo (preset)
  {
  var 
out preset;
  
out.foo 42;

  return 
out;
  }

var 
bar = {my1}:
var 
baz foo (bar);

// auch bar ist jetzt foo-o-i-siert 
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 04.06.2010, 00:18  
Erfahrener Benutzer
 
Registriert seit: 28.05.2008
Beiträge: 2.094
PHP-Kenntnisse:
Fortgeschritten
rudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nettrudygotya ist einfach richtig nett
Standard

Evtl schneller:
PHP-Code:
function clone (obj) {
  
// isArray (evtl die ecma5 isArray-Function mappen)
  
if(!!(obj && obj.concat && obj.unshift && !obj.callee))
    return 
obj.slice(0)
    
// ansonsten iterieren und kopieren

__________________
++++ Wieder einer ins Netz gegangen: Phishers Fritz zufrieden ++++
Blog
rudygotya ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Problem beim dynamischen Erweitern von Arrays in Object Porperties dille001 PHP Tipps 2010 3 24.05.2010 11:52
[Erledigt] Parameter wird als Referenz übergeben? Nightwave PHP Tipps 2010 6 09.04.2010 20:41
Ergebnis einer Datenbankabfrage als Objekt chunky PHP Tipps 2010 7 27.01.2010 21:38
Objekt per Klassenmethode löschen Ti-Systems PHP Tipps 2010 4 20.01.2010 19:28
[Erledigt] Objekt Iteration Löschmethode stayInside PHP-Fortgeschrittene 10 29.11.2009 15:07
[Erledigt] Von einem Objekt auf ein anders Objekt zugreifen Xenon54 PHP Tipps 2009 12 16.10.2009 16:21
Objekt löschen via Methodenübergabe desselben nikosch Software-Design 19 01.06.2009 00:38
[Erledigt] Objekt an Konstruktor übergeben hawkeye78 PHP Tipps 2009 7 28.02.2009 19:01
Referenz in mehrdimensionalem Array auch nach Kopie? ciss PHP Tipps 2008 3 03.12.2008 18:29
Objekt im GET-Query wird nicht übertragen Ralpho PHP-Fortgeschrittene 10 05.05.2008 10:03
Referenz wiederherstellen cycap Datenbanken 8 03.09.2007 14:53
Zugriff auf verschachteltes Objekt aus Funktion FloMX PHP-Fortgeschrittene 10 28.03.2006 17:01
[Erledigt] PHP5 OOP Zugriff aus einem Objekt auf ein externes Objekt PHP Tipps 2006 5 28.01.2006 16:05
Objekt übergeben Fatal Error PHP Tipps 2007 5 28.12.2005 14:43
kann sich ein Objekt selbst serialisieren? ajo_silent PHP Tipps 2005-2 24 27.06.2005 09:13

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
javascript objekt kopieren, php objekt kopieren, javascript objekte kopieren, php objekte kopieren, php kopie statt referenz, js objekt kopieren, javascript wert kopieren statt referenz, php object extend, javascript objekt duplizieren, javascript object kopieren nicht referenzieren, javascript objekt kopieren ohne referenz, objekt kopieren javascript, java objekt kopieren ohne referenz, php objekte kopieren referenz, objekt kopieren statt refernz übergeben, javascript kopieren object, java object reference seiteneffekt, javascript objekte kopieren statt referenzieren, objekt php kopieren, statt refrenz

Alle Zeitangaben in WEZ +2. Es ist jetzt 08:43 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum