收藏
回答

如何重写Page.prototype.setData?

想收集一些统计数据,需要重写setData方法。看文档中有Page.prototype.setData。打算如下操作

const originSetData = Page.prototype.setData;

Page.prototype.setData = function (e, c) {
   // 做一些记录,统计操作
      console.log('记录操作');
      originSetData.apply(this, arguments)  
 }  


按照如上操作后,并没有成功。输出Page.prototype.setData,显示为undefined,请问各位有什么方法可以重写setData么

回答关注问题邀请回答
收藏

3 个回答

  • o0o有脾气的酸奶
    o0o有脾气的酸奶
    2020-06-17
    // 重写page
    // utils/page.js
    const myPage = Page
    module.exports = function (e{
      let {
        onLoad
      } = e
      e.onLoad = (onLoad => {
        return function (res{
                let { setData } = this
                Object.defineProperty(this.__proto__, 'setData', {
            configurablefalse,
            enumerablefalse,
                    value(...param){
                      // 做一些记录,统计操作
                      console.log('记录操作');
    
                      return setData.apply(this, param)
                    }
                })
          onLoad && onLoad.call(this, res)
        }
      })(onLoad)
      return myPage.call(this, e)
    }
    


    // 在app.js引入utils/page.js
    Page = require('./utils/page.js')
    App({
      onLaunchfunction () {
    
      }
    })
    


    // pages/index/index.js
    Page({
        onLoad: function (options) {
            this.setData({
                xxx: 111
            })
        }
    }
    
    2020-06-17
    有用 2
    回复
  • 卢霄霄
    卢霄霄
    2020-06-17

    不知道为啥文档这么写,不过 Page.prototype 和 页面里的this无关,毕竟你又不是 new Page这样来初始化的页面。

    this是一个xxx.default的方法 new 出来的对象,这个对象在外面拿不到。你只能在页面onLoad的时候修改 this.__proto__.setData

    2020-06-17
    有用 1
    回复 2
  • 子不语
    子不语
    2020-06-17

    这个能改?

    请学会如何「提问」(👈戳我)

    2020-06-17
    有用
    回复 3
    • 夏天无🐳
      夏天无🐳
      2020-06-17
      2020-06-17
      1
      回复
    • 夏天无🐳
      夏天无🐳
      2020-06-17
      2020-06-17
      回复
    • 子不语
      子不语
      2020-06-17回复夏天无🐳
      好的,学到了
      2020-06-17
      回复
登录 后发表内容
问题标签