我想要創建一個字符串並通過引用傳遞它,以便我可以更改單個變量並將其傳播給引用它的任何其他對象。在JavaScript中傳遞參考字符串
拿這個例子:
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";
我希望能夠有這種情況發生:
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";
爲什麼不這項工作?
MDC reference on strings表示度量標準是一個對象。
我已經試過這,這不是我想要的,但很接近:
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)
這裏最重要的幾點:
- 我希望能夠使用指標就像它是一個普通的字符串對象
- 我希望每個報告引用同一個對象。
做得很好。我喜歡這是最好的,因爲在報告中,我可以在源代碼中使用最少的混亂字符串,即a()。charAt(1)比String(a).charAt(1) – 2009-08-20 20:58:12
更漂亮「閉包是可以通過訪問封閉範圍的變量來引用(並傳遞)的代碼塊。「從http://stackoverflow.com/a/5444581/483588 – 2012-12-22 18:09:00
這並不表明價值傳遞。這是做什麼只是改變度量值,當然它會記錄新的價值! var obj = { a:「a」 }; var b = obj.a; console.log(obj.a); // a b =「b」; console.log(obj.a); // 一個 – user1769128 2015-06-04 16:04:12