code: function(value) {
        const oldValue = this[subScriptName];
  
        // TODO: add custom comparison options function
        if (oldValue === value) {
          return;
        }
  
        // Clear old child model
        if (oldValue && oldValue instanceof Model && oldValue.parentModel === this) {
          this.removeModelChild(oldValue);
        }
  
        this[subScriptName] = value;
  
        // Update new child model
        if (value && value instanceof Model) {
          this.addModelChild(name, value);
        }
  
        let po = this.propertyOptions[name];
  
        let onChange = po.onChange;
        let doNotNotify = po.doNotNotify;
        let skipNotify = false;
  
        if (onChange) {
          skipNotify = onChange(oldValue, value);
        }
  
        if (this.propertyChange) {
          this.propertyChange(name, oldValue, value);
        }
  
        if (!this.deserializing && !skipNotify && !doNotNotify) {
          this.notify(name, this, value, this.getChangeDescriptor(name, oldValue, value));
        }
      }
docs: ----------------------------------- defaultSet -----------------------------------