javascript - 用空原型(prototype)替换对象

标签 javascript ecmascript-6 spread-syntax

我正在尝试通过将其完全替换为具有一组带有空值的键的对象来刷新一些数据。

例如

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 中的值发生更改,profileScratchpadOneprofileScratchpadTwo 中的值也会发生更改。

我认为正在传递一个引用。

我研究了扩展运算符、原型(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/

相关文章:

javascript - 解析云代码根据评论(对象)生成列表

javascript - 按属性查找多边形 Google map 引擎

javascript - 动态加载的 div 的事件名称

javascript - Node.js 0.12 中提供的 ECMAScript 6 功能

javascript - 了解 ES6 中的导入

javascript - 自定义类扩展 Array 而不使用扩展语法

javascript - JS : How do I strip unwanted code from the end of a string?

javascript - 无法使用 Babel 将 es6 转换为 es5

javascript - 如果 Spread Operator 在 redux 中不起作用

javascript - 重新格式化映射值并使用扩展语法进行更新