title: Alternate/better ways to initialize JavaScript object that needs multiple static values?
body: <p>I have a JavaScript object with some static attribute values, dynamic attribute values and methods.  Each time I need one of these objects, I will need 10 of them. Each of the 10 objects gets initialized by a dedicated object literal.  That happens under 3 different contexts of a user doing something on a data entry form.  User actions can cause the contexts to happen in any order, any number of times, but the same 10 objects will always be created in each context.  By "same" I mean the static values for a "no_matl" object will be identical each time a "no_matl" object is created ... only a few dynamic attribute values (field value, previous value, date/time, context ID) are different for each context.</p>
  
  <p>Is there a smarter way to do the initialization currently done with the const object literal?  Originally I passed a bunch of params to the constructor and initialized the static attributes from those.  The object literal approach seemed cleaner.  Maybe there's a better way?</p>
  
  <pre><code>// 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 &amp;&amp; typeof(arguments[0]) === 'object' ) {
        this.DispName = arguments[0].DispName ;
        this.DbName = arguments[0].DbName ;
        // .... etc for rest of static attributes ...
    }
  }
  </code></pre>