我正在尝试通过将其完全替换为具有一组带有空值的键的对象来刷新一些数据。
例如
const sportPrototype = {
name: '',
players: '',
displacement: '',
points: '',
leagues: []
}
var profileScratchpadOne = {
sportScratchpad: {
name: 'Soccer',
players: '16',
displacement: 'Foot',
points: 'unlimited',
leagues: ["Fifa"]
}
}
profileScratchpadOne.sportScratchpad = sportPrototype
profileScratchpadTwo.sportScratchpad = sportPrototype
只要 sportScratchpad
中的值发生更改,profileScratchpadOne
和 profileScratchpadTwo
中的值也会发生更改。
我认为正在传递一个引用。
我研究了扩展运算符、原型(prototype)、构造函数,但尚未找到一种万无一失的简洁方法。
解决这个问题并每次传递一个新对象的最简洁方法是什么?
最佳答案
虽然Object.assign
在这里可以工作,但对象仍然会共享相同的leagues
数组。只有原始类型的属性才会有单独的生命。您可以找到一个执行深层复制的函数,但我认为在这种情况下您可以使用构造函数模式:
function SportPrototype() {
this.name = '';
this.players = '';
this.displacement = '';
this.points = '';
this.leagues = [];
}
var profileScratchpadOne = {};
var profileScratchpadTwo = {};
var o = new SportPrototype();
o.name = 'Soccer';
o.players = '16';
o.displacement = 'Foot';
o.points = 'unlimited';
o.leagues = ["Fifa"];
profileScratchpadOne.sportScratchpad = o;
profileScratchpadOne.sportScratchpad = new SportPrototype();
profileScratchpadTwo.sportScratchpad = new SportPrototype();
现在最后两个赋值将生成完全独立的对象。
关于javascript - 用空原型(prototype)替换对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42192817/