尝试分析这段代码,但不确定它的作用是什么?这如何演示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.");
答案 0 :(得分:2)
首先,修复三个(语法)错误:
I
改为小写i
return root;
使其正常工作,否则undefined
将被分配到merged
(
到{
。除此之外,代码很简单。 function merge
需要任意数量的参数。它是iterates来自索引1的arguments
object(即不包括root
参数),并且对于每个项目enumerates its properties,copying他们的值为{{1}对象。 bracket syntax用于按名称访问属性值。
因此,root
合并全部通过objects进入第一个对象,覆盖现有的密钥。
答案 1 :(得分:0)
这会将两个或多个对象合并为一个。
{name: "Batou"}
是一个快捷方式:
var obj = new Object();
obj.name = "Batou";
函数arguments
内部是一个在调用时传递的参数数组,您可以像在数组中一样更改对象中的属性,但使用字符串:
obj["name"] = "Batou";
assert
关键字将检查条件是否为真,它用于调试建议。
答案 2 :(得分:0)
首先,我在您的代码中看到3个错误:大写I
应为i
; (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"
}
答案 3 :(得分: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"}
然后循环遍历其他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"}
答案 4 :(得分: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.");