myPage.js 1.2 KB

let data
// 这里data从app.js中传入,为了获取data的一些参数
export function init(_data) {
  data = _data
  // 重写page函数,增加阿里云监控和日志记录
  let oldPage = Page
  Page = function(obj) {
    // 重写onShow方法,用一个变量保存旧的onShow函数
    console.log(obj)
    let keys = Object.keys(obj)
    console.log(keys)
    let oldOnShow = obj.onShow
    obj.onShow = function() {
      console.log(111)
      // 此处不能写成oldOnShow(),否则没有this,this.setData等方法为undefined。这里的this在Page构造函数实例化的时候才会指定
      // 在Page构造函数实例化的时候,小程序会将当前的Page对象的原型链(__proto__)增加很多方法,例如setData。当前的obj没有setData
      // 上面一段是我猜的
      oldOnShow.call(this)
    }
    // 重写onHide方法,用一个变量保存旧的onHide函数
    let oldOnHide = obj.onHide
    obj.onHide = function() {
      console.log(2222)
      // 此处不能写成oldOnHide(),否则没有this,this.setData等方法为undefined。这里的this在Page对象实例化的时候才会指定
      oldOnHide.call(this)
    }
    return oldPage(obj)
  }
}