替代/更好的方法来初始化需要多个静态值的JavaScript对象?

问题描述 投票:0回答:1

我有一个JavaScript对象,其中包含一些静态属性值,动态属性值和方法。每次我需要这些对象之一时,我将需要其中10个对象。 10个对象中的每一个都由专用的对象常量初始化。这是在用户在数据输入表单上执行某项操作的3种不同上下文中发生的。用户操作可以使上下文以任何顺序,任何次数发生,但是在每个上下文中始终会创建相同的10个对象。所谓“相同”,是指每次创建“ no_matl”对象时,“ no_matl”对象的静态值都将相同...仅包含一些动态属性值(字段值,先前值,日期/时间,上下文ID)每个上下文都不同。

是否有更聪明的方法来完成当前使用const对象常量进行的初始化?最初,我将一堆参数传递给构造函数,并从中初始化了静态属性。对象文字方法似乎更干净。也许有更好的方法?

// object literals used to initialize a each of the 10 
// different type objects.
const FIELD_NOMATERIAL = {
  DispName: 'No Material',
  DbName: 'NO_MATERIAL',
  TrueVal: 'Yes',
  InitVal: '',
  DispWhenSet: 'yes',
  DispWhenNotSet: ''
};

const FIELD_CPCAT = { ... same attributes, different values ...};

const FIELD_HCN = { ... same attributes, different values ...};
// ... 7 more like this ...

// context 1
var no_matl = new MyField(FIELD_NOMATERIAL),
    cpcap = new MyField(FIELD_CPCAT),
    hcn = new MyField(FIELD_HCN)  .... 7 more like this

// object definition
function MyField() {
  if (arguments.length == 1 && typeof(arguments[0]) === 'object' ) {
      this.DispName = arguments[0].DispName ;
      this.DbName = arguments[0].DbName ;
      // .... etc for rest of static attributes ...
  }
}
javascript javascript-objects
1个回答
0
投票

听起来像您想要的是原始对象的副本,可以更改值而无需更改原始对象。试试这个:

const FIELD_NOMATERIAL = {
  DispName: 'No Material',
  DbName: 'NO_MATERIAL',
  TrueVal: 'Yes',
  InitVal: '',
  DispWhenSet: 'yes',
  DispWhenNotSet: ''
};

function getFreshCopy(original) {
  return Object.assign({}, original);
}

var no_matl = getFreshCopy(FIELD_NOMATERIAL);

使用Object.assign({}, obj)将创建一个新副本,可以在不更改原始值的情况下对其进行更改。可以调节no_matl,并且FIELD_NOMATERIAL保持其原始状态。

注意const表示无法为变量分配新值。这并不意味着不能更改对象的内容。这意味着以下事实:

const noChange = { a: 7 };
noChange.a = 8;      // this is fine because 'a' is allowed to change
noChange = "hello";  // this gives TypeError: Assignment to constant variable.
© www.soinside.com 2019 - 2024. All rights reserved.