Mein Verständnis: in Javascript Objekte und Arrays erhalten als Referenzen nicht Werte für Funktionsargumente. Eine jQuery-Gruppe ist ein Objekt und sollte daher als Referenz übergeben werden.jQuery Objekt als Argument an die Funktion übergeben ist Wert kopieren nicht Referenz?
Allerdings finde ich im Testskript unten, dass etwas Seltsames vor sich geht; Die jQuery-Gruppe benimmt sich wie ein Wert, keine Referenz, es sei denn, sie ist in ein anderes Objekt eingepackt ... Kann das jemand erklären?
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
</head>
<body>
<script>
function test(arg){
arg = arg.add($('<span/>'))
console.log(arg);
};
ele = $('<div/>');
test(ele); // div + span in the group as expected
console.log(ele); // only the div - the 'arg' param in function was a copy
function test2(arg){
arg.a = arg.a.add($('<span/>'));
console.log(arg.a);
};
obj = {a:ele};
test2(obj); // div + span in the group as expected
console.log(obj.a); // both in the group - arg acted like a reference!
</script>
</body>
</html>
* Dies ist ein "Feature" der .add() - Methode. * - macht es so, als wäre es mit einer anderen Methode möglich, wenn es so codiert wäre. Tatsache ist, dass ein neuer Wert auf die Variable 'arg' innerhalb der Funktion gesetzt wird und nicht die 'ele'-Variable im äußeren Bereich ändert, von der das OP denkt, dass sie "per Referenz" übergeben wurde. –
@Andy E - Eigentlich ist es möglich. Ich gebe ein anderes Beispiel mit dem ursprünglichen Code von OP, aber mit 'push()' statt dessen. Es ändert das jQuery-Objekt korrekt und "ele" verweist auf das geänderte Objekt. – user113716
@Andy E - Ok, vielleicht verstehe ich die korrekte Bedeutung von * "pass by reference" * falsch. Wenn Sie eine Variable übergeben, übergeben Sie einen Verweis auf ihren Wert, von dem ich glaube, dass er genauso in anderen objektorientierten Sprachen wie Java angezeigt wird. Täusche ich mich? In jedem Fall veranschaulichen beide Lösungen die richtigen Konzepte innerhalb von Javascript. – user113716