2015-11-02 38 views
0

目前,我正在學習更多關於JavaScript對象的內部運作和跨在多個變量從對象返回的例子就是:有道從JavaScript對象返回多個變量

var squareGrid = function(width, n, z) { 
     width = width || 1; 
     n = n || 4; 
     var z = z || width/2.0; 

     var edges = [], 
      pts = []; 

     var step = width/n; 
     for (var u = 0; u < n; u++) { 
      var u_added = u * n * 4; 
      for (var v = 0; v < n; v++) { 
       var delta = u_added + 4 * v; 

       var t_v = step * (v - n/2); 
       var t_u = step * (u - n/2); 

       pts.push([t_v, t_u, z]); // top left 
       pts.push([t_v, t_u + step, z]); // top right 
       pts.push([t_v + step, t_u + step, z]); // bottom right 
       pts.push([t_v + step, t_u, z]); // bottom left 

       edges.push([delta + 0, delta + 1]); 
       edges.push([delta + 1, delta + 2]); 
       edges.push([delta + 2, delta + 3]); 
       edges.push([delta + 3, delta + 0]); 
      } 

     } 
     return { 
      edges: edges, 
      pts: pts 
     }; 
    } 

在這種情況下, ,爲了返回edgespoints,看起來有鍵 - 值對被返回,其中鍵和值是相同的東西。這種方法是必要的還是可以做到以下幾點?

return{ edges, pts}};

+0

不在ES5,除非你想要的陣列。 – SLaks

+0

@SLaks我可以這麼做嗎:'''return {edges,pts}};'''?如果是這樣,我應該什麼時候使用哪種方法? – loremIpsum1771

+3

JavaScript對象不返回任何東西。在你的例子中,該函數返回一個對象。 'return {edges,pts}'實際上是有效的ES6,它只是'return {edges:edges,pts:pts}'的簡寫形式。但是我不清楚你的問題是什麼。 *「看起來有鍵值對被返回,而鍵和值是相同的東西」*它們不是。屬性名稱和*變量名稱*是一樣的。屬性名稱是字符串「邊緣」,但值是一些東西。 –

回答

3

你會返回一個對象,其中鍵將邊緣和值將是邊緣的返回值。

x = squareGrid(400, 2, 5) 

x.edges 
// edges 
x.pts 
//pts 

你可以這樣做:數據= callfunction() - >回[邊緣,分]

data[0] 
// edges 
data[1] 
//points 

** **更正時 密鑰存儲在一個js哈希它系列化關鍵試圖保存前值

什麼會被存儲在陣列爲重點的序列化版本,取值爲數組

+0

邊緣的關鍵值如何與返回值不同。如果邊是一個數組,比任何時候都引用「邊」,它應該保持數組的值嗎? – loremIpsum1771

+0

我不知道你的意思 – loremIpsum1771

+0

剛剛測試了一些東西:)更新了我的答案。 嘗試將對象存儲爲散列中的鍵將默認爲[object Object],因爲沒有直接序列化對象的方式,但是當鍵是數組時,它會首先將其序列化爲字符串。 – Anchalee