This:
const changeColor = () => {
const div = document.querySelector("div");
let {color, background} = div.style;
color = "red";
background = "blue";
};
这段代码与其他代码完全相同,只是div.style
只会被计算一次:
const changeColor = () => {
const div = document.querySelector("div");
let color = div.style.color;
let background = div.style.background;
color = "red";
background = "blue";
};
在任何情况下,改变局部变量都不会对对象属性产生影响。局部变量获得了对象属性的值,它没有持久性地链接回对象属性。
换句话说:解构只是创建局部变量,它不会创建一个对象,它是一种“视图”,提供对原始对象属性的访问器。(这可能很有趣,但这不是解构的作用)
不过,你可以这样做:
const changeColor = () => {
const {style} = document.querySelector("div");
style.color = "red";
style.background = "blue";
};
这能够实现是因为我们获取到了div的style对象的引用,并直接修改其属性。
或者完全不使用解构:
const changeColor = () => {
Object.assign(document.querySelector("div").style, {
color: "red",
background: "blue"
});
};
如果函数接受这些参数,那么:
const changeColor = (color, background) => {
Object.assign(document.querySelector("div").style, {color, background});
};
你可以通过
changeColor("red", "blue");
调用它。
Object.assign(div.style, { color, background })
。 - Patrick Roberts