小程序如何挂载一个类似 wx 这样的全局对象?
发布于 4 年前 作者 chaoshao 413 次浏览 来自 问答

背景

想做一个类似 pollyfill 的通用方法,以兼容微信、支付宝、百度小程序三者的 API 调用,因为三者之间部分 API 是有细微区别的。

不想每次都改一遍,然后有些转换工具转化效果还是不够理想,自己用 Gulp 写的脚步也不能完全兼容。

如果写了 pollfill 的话,也方便统一管理、维护。

想法 & 不足

将其挂载到 global 对象或者导出 ESM 模块,但是这种方式仍需要在使用之前,先引入。

求助

有没有一个方法可以直接调?像 wx 这个对象,我们可以在任何地方随时调用。例如 wx.chooseImage。

比如我将 mini 作为自定义的全局对象, 然后也想在任何地方通过 mini.xxx 来调用,如 mini.chooseImage

其他思路

看过别人一方法,可真机上不行,因为在真机上 this 为 undefined,如下:

Object.defineProperty(Object.prototype, '__root', {
  get() {
    if (this && this.App === App) {
      return this
    }
  },
  configurable: false,
  enumerable: false
})

// 使用
// __root.xxx
2 回复

类似这种直接挂载到字符串的原型上,然后通过 ‘xx’.xxx,写一个字符串去调用就好了

getApp().xxxx 
回到顶部