I want to create a string and pass it by reference such that I can change a single variable and have that propagate to any other object that references it.
Take this example:
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"; I want to be able to have this happen:
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"; Why doesn't this work?
The MDC reference on strings says metric is an object.
I've tried this, which is not what I want, but is very close:
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) The important points here:
- I want to be able to use metric like it's a normal string object
- I want each report to reference the same object.