我也想让我的函数addHat()对其他person对象可重用,所以我决定使用this代替这个人的确切名称,并通过addHat.call()和addHat.apply()方法将其他对象传递为this。
即。我希望使用spread浅拷贝person对象(对所有属性都有新的引用)。
但是,它不能在分配的两边使用this。
let person1 = {
a: "a",
hats: [],
gloves: []
};
function addHat(newHat, ...params) {
this = {
...this,
hats: [...this.hats, newHat, ...params],
};
}
addHat.call(person1, "hatA");
console.log(person1.hats);
但是当直接使用这个名称时,它是非常有效的:
let person1 = {
a: "a",
hats: [],
gloves: []
};
function addHat(newHat, ...params) {
person1 = {
...person1,
hats: [...person1.hats, newHat, ...params],
};
}
addHat.apply("uselessThis", ["hatA", "hatB"]);
console.log(person1.hats);
你能帮我使这个函数在当前格式下可重用吗?(使用对象属性的扩展和浅拷贝)
每一个提示或帮助都将是非常感谢的。
发布于 2022-04-22 13:26:06
我认为,如果您将角色作为函数的参数传递,则会更容易。
尽量避免在js中使用这一点,因为调试会变得很棘手。
let person1 = {
a: "a",
hats: [],
gloves: []
};
function immutableAddHat(person, ...newHats) {
return {
...person,
hats: [...person.hats, ...newHats],
};
}
function addHat(...newHats) {
Object.entries(this).forEach(([k, v]) => {
this[k] = v
})
this.hats = [...this.hats, ...newHats]
}
const newPerson1 = immutableAddHat(person1, "hatA");
console.log(newPerson1.hats);
addHat.call(person1, "Hatb")
console.log(person1)
我添加了使用以下内容的方法
https://stackoverflow.com/questions/71969435
复制相似问题