Home / Class/ Observer Class — vue Architecture

Observer Class — vue Architecture

Architecture documentation for the Observer class in index.ts from the vue codebase.

Entity Profile

Dependency Diagram

graph TD
  2c74d940_5549_d682_16cc_0c643fff7d8d["Observer"]
  012c0986_6b9d_ad59_8fba_57884312dd3b["index.ts"]
  2c74d940_5549_d682_16cc_0c643fff7d8d -->|defined in| 012c0986_6b9d_ad59_8fba_57884312dd3b
  90ef1d3a_2785_5dda_2141_19e108797c9d["constructor()"]
  2c74d940_5549_d682_16cc_0c643fff7d8d -->|method| 90ef1d3a_2785_5dda_2141_19e108797c9d
  17657a1e_b0a2_0135_b657_5fa134adbfec["observeArray()"]
  2c74d940_5549_d682_16cc_0c643fff7d8d -->|method| 17657a1e_b0a2_0135_b657_5fa134adbfec

Relationship Graph

Source Code

src/core/observer/index.ts lines 48–95

export class Observer {
  dep: Dep
  vmCount: number // number of vms that have this object as root $data

  constructor(public value: any, public shallow = false, public mock = false) {
    // this.value = value
    this.dep = mock ? mockDep : new Dep()
    this.vmCount = 0
    def(value, '__ob__', this)
    if (isArray(value)) {
      if (!mock) {
        if (hasProto) {
          /* eslint-disable no-proto */
          ;(value as any).__proto__ = arrayMethods
          /* eslint-enable no-proto */
        } else {
          for (let i = 0, l = arrayKeys.length; i < l; i++) {
            const key = arrayKeys[i]
            def(value, key, arrayMethods[key])
          }
        }
      }
      if (!shallow) {
        this.observeArray(value)
      }
    } else {
      /**
       * Walk through all properties and convert them into
       * getter/setters. This method should only be called when
       * value type is Object.
       */
      const keys = Object.keys(value)
      for (let i = 0; i < keys.length; i++) {
        const key = keys[i]
        defineReactive(value, key, NO_INITIAL_VALUE, undefined, shallow, mock)
      }
    }
  }

  /**
   * Observe a list of Array items.
   */
  observeArray(value: any[]) {
    for (let i = 0, l = value.length; i < l; i++) {
      observe(value[i], false, this.mock)
    }
  }
}

Domain

Frequently Asked Questions

What is the Observer class?
Observer is a class in the vue codebase, defined in src/core/observer/index.ts.
Where is Observer defined?
Observer is defined in src/core/observer/index.ts at line 48.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free