SOURCE

function defineReactive (data, key, val) {
  observe(val)
  // var $Dep = new Dep()
  Object.defineProperty(data, key, {
    enumberable: true,
    configurable: true,
    get: function () {
      // if (Dep.target) $Dep.addSubs(Dep.target)
      return val
    },
    set: function (newVal) {
      // if (val === newVal) return
      
      val = newVal
      console.log(`属性 ${key} 已被监听,新的值是 ${newVal.toString()}`)
      // $Dep.notify()
    }
  })
}

function observe (data) {
  if (!data || typeof data !== 'object') return
  
  Object.keys(data).forEach(function (key) {
    defineReactive(data, key, data[key])
  })
}

var person = {
  'Alex': {
    'salary': 0
  },
  'Bob': {
    'age': 20
  }
}

observe(person)

setTimeout(function () {
	person.Alex.salary = 20000
	person.Bob.age = 40  
})
console 命令行工具 X clear

                    
>
console