constructor (options, defaults) {
    this.defaults = defaults
    this.jsoneditor = options.jsoneditor
    this.theme = this.jsoneditor.theme
    this.template_engine = this.jsoneditor.template
    this.iconlib = this.jsoneditor.iconlib
    this.translate = this.jsoneditor.translate || this.defaults.translate
    this.translateProperty = this.jsoneditor.translateProperty || this.defaults.translateProperty
    this.original_schema = options.schema
    this.schema = this.jsoneditor.expandSchema(this.original_schema)
    this.active = true
    this.isUiOnly = false
    this.options = extend({}, (this.options || {}), (this.schema.options || {}), (options.schema.options || {}), options)
    this.enforceConstEnabled = this.options.enforce_const ?? this.jsoneditor.options.enforce_const
    this.formname = this.jsoneditor.options.form_name_root || 'root'

    if (!options.path && !this.schema.id) this.schema.id = this.formname
    this.path = options.path || this.formname
    this.formname = options.formname || this.path.replace(/\.([^.]+)/g, '[$1]')

    this.parent = options.parent
    this.key = this.parent !== undefined ? this.path.split('.').slice(this.parent.path.split('.').length).join('.') : this.path

    this.link_watchers = []
    this.watchLoop = false
    this.optInWidget = this.options.opt_in_widget ?? this.jsoneditor.options.opt_in_widget

    if (options.container) this.setContainer(options.container)
    this.registerDependencies()
  }
All editors should extend from this class