背景
想做一个类似 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
Object.defineProperty(Object.prototype, '__root', { get() { let obj = {} obj.print = functon(msg){ console.log(msg) } return obj }, configurable: false, enumerable: false }) // 使用 // __root.print('hello world')
getApp().xxxx
类似这种直接挂载到字符串的原型上,然后通过 'xx'.xxx,写一个字符串去调用就好了