擴展微信小程序 Page 構造函數,修改生命週期函數

不BB,直接正題app

一. 將公共方法綁定到Page上

  • 單個綁定函數

    const oldPage = Page
    Page = function(app) {
      // 注意公共函數的名字不要重複,不然覆蓋
      app.util = function() {}
      
      return oldPage(app)
    }
  • 多個綁定,文件綁定ui

    const util = require('./util.js');  // 須要綁定的函數由util文件exports出來
    const oldPage = Page
    Page = function(app) {
      let newPage = Object.assign({}, util, app)
      
      return oldPage(newPage)
    }

二. 擴展,修改生命週期函數

const oldPage = Page
Page = function(app) {
  app.onLoad = function(options) { // 這裏必須使用function, 不能夠使用箭頭函數, 不然this指向錯誤
      console.log("擴展onLoad");
  
      // onLoad函數在是當前page實例上下文中執行,因此當前的this爲當前page實例
      // 若是不使用call來硬綁定,而是直接app.onLoad(),那麼onLoad裏的this將爲app這個對象
      // 即咱們正常在page.js裏Page(app) 括號裏面咱們本身寫的page對象
      if(typeof app.onLoad === 'function') {
          app.onLoad.call(this, options); 
      }
  }
  
  return oldPage(app)
}

ps.想更系統的瞭解js關於this的知識能夠戳這裏this

三. 使用

我本身寫的時候,將自定義的內容單獨封裝到一個js文件中,而後在app.js中引用這個文件便可code

require('./init.js'); //引用便可
App({
  onLaunch: function (options) {
  }

})
相關文章
相關標籤/搜索