这是客户端。 Webpack,Babel和Babel Imports。
我的项目有一个名为" models"的文件夹。其中包含对象文字作为端点的预期JSON结果的定义。
对象只包含字符串,整数,布尔值和包含这些数据类型的数组/对象
例如:
{
name: "String"
age: 35,
active: true,
permissions: [
{ news: true }
]
}
当我想使用模型定义时,为了确保我没有引用问题,我必须使用:
let newObject1 = Object.assign({}, originalObj )
或
let newObject2 = JSON.parse( JSON.stringify( originalObj ))
我发现这有点难看,它会污染我的代码。
我希望能够在对象文字上使用new
关键字,但当然这不是一件事。
let clone = new targetObj
在不创建引用的情况下,处理克隆对象文字的最美观方法是什么?
答案 0 :(得分:2)
实现此类对象的JavaScript方式"模板"是建设者:
function Original() {
this.name = "String";
this.age = 18;
this.active = true;
this.permissions = [
{ news: true }
];
}
var obj = new Original();
console.log(obj);

或者,在ES6 class
语法中:
class Original {
constructor() {
this.name = "String";
this.age = 18;
this.active = true;
this.permissions = [
{ news: true }
];
}
}
let obj = new Original();
console.log(obj);

请注意,Object.assign
只会创建一个浅表副本,因此它不会复制permissions
数组,而是提供与原始数据相同的相同数组的引用对象
const originalObject = {
name: "String",
age: 35,
active: true,
permissions: [
{ news: true }
]
};
let obj1 = Object.assign({}, originalObject);
let obj2 = Object.assign({}, originalObject);
// change a permission:
obj1.permissions[0].news = false;
// See what permissions are in obj2:
console.log(obj1.permissions);

答案 1 :(得分:1)
const model = () => ({
name: 'string',
age: 20,
array: [ 1, 2, 3 ]
});
let newObject = model();
您无法使用new
- 请参阅trincot的答案 - 但您不必担心嵌套对象(assign
)或感觉粗略(stringify + parse
)。