2012-12-06 59 views
-1

試圖分析這個代碼片斷,但真的不知道它做什麼?這是如何演示JS如何使用函數的?對於新問題抱歉。困惑?謝謝。分析功能

function merge(root) { 
    for (var i = 1; i < arguments.length; i++) { 
     for (var key in arguments[i]) { 
      root[key] = arguments[i][key]; 
     } 
    } 
} 

var merged = merge(
    {name: "Batou"}, 
    {city: "Niihama"}, 
    (activity: "Weights", min: 0, max: 35, points: 2500, scale: "sum"}); 

assert(merged.name === "Batou", 
    "The original name is intact."); 
assert(merged.max === 35, 
    "The maximum number of sets is 35."); 
+2

你到底明白了什麼?順便說一句,你的代碼包含一些錯誤。 – Bergi

+0

對不起,我的代碼!我只是想通過操作來了解發生了什麼。我是JavaScript新手(正如你所看到的)並試圖理解函數的概念。 – wdebvrd

+0

'merge'不會返回'root',所以它實際上並沒有做很多事情。 – Shmiddty

回答

0

這會將兩個或多個對象合併爲一個。

{name: "Batou"}

是一個快捷方式:

var obj = new Object(); 
obj.name = "Batou"; 

在函數arguments是在調用中傳遞一個數組,就像你在一個數組,但使用字符串你可以改變對象的屬性:

obj["name"] = "Batou"; 

assert關鍵字將檢查,如果條件爲真,它用於調試建議。

0

首先,我看到你的代碼3個錯誤:大寫Ii; (activity:應該是{activity:;該功能應該是return root

如果解決這個問題,該函數應該傳遞給它的所有對象合併爲一個對象。你傳遞3個對象:

  • {name: "Batou"}
  • {city: "Niihama"}
  • {activity: "Weights", min: 0, max: 35, points: 2500, scale: "sum"}

鑑於這些3個對象作爲輸入,該函數返回一個拼接對象:

{ 
    name: "Batou", 
    city: "Niihama", 
    activity: "Weights", 
    min: 0, 
    max: 35, 
    points: 2500, 
    scale: "sum" 
} 
2

首先,修復三個(語法)錯誤:

  • 線2:I爲小寫i
  • 線6:你想return root;從功能,使其工作,否則undefined將被分配到merged
  • 線12:({

除此之外,它的代碼非常簡單。所述functionmerge需要的參數的任意的量。它iteratesarguments object從索引1(即不包括root參數)和它的每個項目enumerates its properties,copying它們的值到root對象。該bracket syntax被他們的名字來訪問屬性值。

所以,merge合併全部通過objects至第一目標,覆蓋現有的密鑰。

0

JavaScript有一個名爲arguments的對象,它包含所有參數,函數被調用。

function merge(root) { 
    for (var i = 1; I < arguments.length; i++) { 
     for (var key in arguments[i]) { 
      root[key] = arguments[i][key]; 
     } 
    } 
} 

基本上需要多個參數,並把,將其傳遞給函數

其他參數(從第二個)到第一對象的所有屬性說到:

這是傳遞給函數的第一個參數: {name: "Batou"}

T母雞它遍歷其他2個obbjects

{city: "Niihama"}, 
(activity: "Weights", min: 0, max: 35, points: 2500, scale: "sum"}); 

的性能,並增加了它們的屬性,以第一位的,造成這種

{name: "Batou", 
city: "Niihama", 
activity: "Weights", min: 0, max: 35, points: 2500, scale: "sum"} 
0

的代碼工作,因爲寫的,它需要是修改:

function merge(root) { 
    for (var i = 1; i < arguments.length; i++) { 
     for (var key in arguments[i]) { 
      root[key] = arguments[i][key]; 
     } 
    } 
    return root; // without this line, "merged" below will always be undefined. 
} 

var merged = merge(
    {name: "Batou"}, 
    {city: "Niihama"}, 
    {activity: "Weights", min: 0, max: 35, points: 2500, scale: "sum"}); 

assert(merged.name === "Batou", 
    "The original name is intact."); 
assert(merged.max === 35, 
    "The maximum number of sets is 35."); 

或者,需要以不同的方式使用:

function merge(root) { 
    for (var i = 1; i < arguments.length; i++) { 
     for (var key in arguments[i]) { 
      root[key] = arguments[i][key]; 
     } 
    } 
} 

var merged = {name: "Batou"}; 
merge(
    merged, 
    {city: "Niihama"}, 
    {activity: "Weights", min: 0, max: 35, points: 2500, scale: "sum"}); 

assert(merged.name === "Batou", 
    "The original name is intact."); 
assert(merged.max === 35, 
    "The maximum number of sets is 35.");