应该是在应用程序逻辑处理之前克隆的input数据对象?

我工作在一个开源项目 – 对象文档映射器又名。 ODMjavascript ,我面临一个devise决定,我奋斗(相当simple但不easy )。

ODM您可以定义一个Model对象来描述数据库中的数据文档。 当创build一个新的Model实例对象时,可以通过parameter passing它的数据值。
伪代码:

 var data = { username: 'james' email: 'james@email.com', country: { code: 'US', city: '' } }; // In case the data object would not be cloned, it would be mutated by the ODM var user = new UserModel(data); 

现在,我所面临的决定是在应用程序(ODM)处理之前是否自动克隆模型中的data对象。 我倾向于select不克隆input数据。 我觉得在javascript社区中,通常克隆数据通常比所需要的要多,因为它可以使最终用户变得easysimple )。 从我的研究中,我发现一些类似和stream行的项目决定克隆数据,但我不确定这是一个正确的select,考虑到一个模型可以有大而复杂的数据模式,虽然没有任何区别在几十个Model实例对象的情况下,我认为这可能是一个问题,而使用例如:数百个Model对象。

我很想听听你对这个话题的推理,你的select是什么?
如果你已经看到另一个答案,请不要犹豫,写下你的想法!
谢谢!

如果不断使用input对象来保存实体的数据,那么如果不克隆对象,将面临以下问题:

 var UserModel = function(data) { this.data = data; } UserModel.prototype.getUsername = function() { return this.data.username; } var data = {username: 'james'}; var james = new UserModel(data); data.username = 'john'; var john = new UserModel(data); console.log(james.getUsername()); // "john" console.log(john.getUsername()); // "john"