-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.");
4

5 に答える 5

2

まず、3 つの (構文) エラーを修正します。

  • 2行目:I小文字にするi
  • 6行目:return root;関数からそれを機能させたい場合、それ以外のundefined場合はに割り当てられますmerged
  • 12行目:({

それとは別に、コードは非常に単純です。この関数 mergeは、任意の量のパラメーターを取ります。インデックス 1 からオブジェクト反復し(つまり、パラメーターを含まない)、各項目についてそのプロパティを列挙し、それらの値をオブジェクトにコピーします。ブラケット構文は、名前でプロパティ値にアクセスするために使用されます。argumentsrootroot

したがって、渡されたすべてのオブジェクトを最初のオブジェクトにmerge マージし、既存のキーを上書きします。

于 2012-12-06T18:42:53.817 に答える
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];
        }
    }
}

基本的に複数の引数を取り、他の引数のすべてのプロパティ (2 番目のものから始まる) を、関数に渡された最初のオブジェクトに入れます。

話し中 :

これは、関数に渡される最初の引数です。 {name: "Batou"}

次に、他の 2 つのオブジェクトのプロパティをループします。

{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"}
于 2012-12-06T18:42:55.453 に答える
0

これにより、2 つ以上のオブジェクトが 1 つにマージされます。

{name: "Batou"}

次へのショートカットです。

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

関数内にargumentsは、呼び出し時に渡される引数の配列があり、配列で行うのと同じようにオブジェクトのプロパティを変更できますが、文字列を使用します。

obj["name"] = "Batou";

キーワードはassert、条件が真かどうかをチェックし、デバッグの提案に使用されます。

于 2012-12-06T18:40:26.613 に答える
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.");
于 2012-12-06T18:48:08.577 に答える
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"
}
于 2012-12-06T18:41:59.383 に答える