Ich möchte eine Zeichenfolge erstellen und übergeben Sie über Verweis, so dass ich eine einzelne Variable ändern und diese auf jedes andere Objekt, das es referenzieren kann.Übergeben Sie eine Zeichenfolge durch Verweis in Javascript
Nehmen Sie dieses Beispiel:
function Report(a, b) {
this.ShowMe = function() { alert(a + " of " + b); }
}
var metric = new String("count");
var a = new Report(metric, "a");
var b = new Report(metric, "b");
var c = new Report(metric, "c");
a.ShowMe(); // outputs: "count of a";
b.ShowMe(); // outputs: "count of b";
c.ShowMe(); // outputs: "count of c";
Ich möchte in der Lage sein, dies zu haben:
var metric = new String("count");
var a = new Report(metric, "a");
var b = new Report(metric, "b");
var c = new Report(metric, "c");
a.ShowMe(); // outputs: "count of a";
metric = new String("avg");
b.ShowMe(); // outputs: "avg of b";
c.ShowMe(); // outputs: "avg of c";
Warum funktioniert das nicht?
Die MDC reference on strings sagt metric ist ein Objekt.
Ich habe das versucht, was nicht, was ich will, ist aber ganz in der Nähe:
var metric = {toString:function(){ return "count";}};
var a = new Report(metric, "a");
var b = new Report(metric, "b");
var c = new Report(metric, "c");
a.ShowMe(); // outputs: "count of a";
metric.toString = function(){ return "avg";}; // notice I had to change the function
b.ShowMe(); // outputs: "avg of b";
c.ShowMe(); // outputs: "avg of c";
alert(String(metric).charAt(1)); // notice I had to use the String constructor
// I want to be able to call this:
// metric.charAt(1)
Die wichtigen Punkte hier:
- Ich möchte Metrik verwenden, um der Lage sein, wie es ist ein normales String-Objekt
- Ich möchte, dass jeder Bericht auf das gleiche Objekt verweisen.
Schön gemacht. Ich mag das am besten, weil ich innerhalb von Report mit der Zeichenkette mit minimaler Unordnung in der Quelle arbeiten kann, dh a(). CharAt (1) ist viel hübscher gegen Zeichenkette (a) .charAt (1) –
"Eine Schließung ist a Code-Block, der referenziert werden kann (und weitergegeben werden kann) mit Zugriff auf die Variablen des umschließenden Bereichs. " von http://stackoverflow.com/a/5444581/483588 –
Dies zeigt nicht den Wert als bestanden. Was dies tut, ist einfach den Messwert zu ändern, natürlich wird der neue Wert protokolliert! var obj = { a: "a" }; var b = obj.a; console.log (obj.a); // a b = "b"; console.log (obj.a); // ein – user1769128