在JavaScript中,这种情况下的首选模式是什么?

What is the preferred pattern for this case in JavaScript?

本文关键字:模式 是什么 JavaScript 这种情况下      更新时间:2023-09-26

在风格上,我不确定在JavaScript中处理这种情况的最佳方法。

我们从这个开始,如果有以前的模型的话,我们可以得到它的副本。然后,我根据这些值(如果它们可用)创建一个损伤诊断模型。

this._previousModel = this.impairmentsCollection.get(this.model.get('id')) || '';

选项1:

this._impairmentDiagnosisModel = new ImpairmentDiagnosisModel({
    id: this.model.get('id'),
    cdx: (this._previousModel && this._previousModel.get('diagnosis').cdx) || _.first(this._diagnosisClass).id,
    nonKeyFactor: this._previousModel && this._previousModel.get('diagnosis').nonKeyFactor,
    impairmentValue: this._previousModel && this._previousModel.get('diagnosis').impairmentValue,
    side: this._previousModel && this._previousModel.get('diagnosis').side,
    digit: this._previousModel && this._previousModel.get('diagnosis').digit
});

选项2:

if(this._previousModel) {
    this._impairmentDiagnosisModel = new ImpairmentDiagnosisModel({
        id: this.model.get('id'),
        cdx: this._previousModel.get('diagnosis').cdx,
        nonKeyFactor: this._previousModel.get('diagnosis').nonKeyFactor,
        impairmentValue: this._previousModel.get('diagnosis').impairmentValue,
        side: this._previousModel.get('diagnosis').side,
        digit: this._previousModel.get('diagnosis').digit
    });
}
else {
    this._impairmentDiagnosisModel = new ImpairmentDiagnosisModel({
        id: this.model.get('id'),
        cdx: _.first(this._diagnosisClass).id
    });
}

对于选项#1,它会将不必要的空属性丢弃在模型中,但这在这里无关紧要。如果服务器接收到空属性,它们将被忽略。

使用选项#2,代码更多,更容易阅读,但似乎效率低下。

在这种情况下首选的方法是什么?

选项3:您可以克隆您的_previousModel.get('diagnosis')对象,然后修改它以添加自定义属性。

例如

var data = (this._previousModel) ? _.clone(this._previousModel.get('diagnosis')) : {};
data.id = this.model.get('id');
data.cdx = data.cdx || _.first(this._diagnosisClass).id;
this._impairmentDiagnosisModel = new ImpairmentDiagnosisModel(data);