小程序中的App、Page、global三者的关系
场景 在某些场景下,我们需要覆盖App或Page做一些自定义处理,就像web开发中我们经常覆盖XMLHttpRequest对象一样。 [代码]global.App = [代码][代码]function[代码] [代码]CustomApp(...args) {[代码] [代码] [代码][代码]// 扩展逻辑...[代码] [代码] [代码][代码]App(...args)[代码] [代码]}[代码] 遇到的问题 如果未关闭“ES6转ES5”,以上的写法会报错“Maximum call stack size exceeded” 这个好理解,因为执行`App(...args)`时,App已经指向了`CustomApp`,是一个死循环。 但是,如果启用“ES6转ES5”,则不报错。 启用“ES6转ES5”之后,global是这样一个对象(不包含App、Page): [代码]{[代码][代码] [代码][代码]"process"[代码][代码]: {[代码][代码] [代码][代码]"env"[代码][代码]: {}[代码][代码] [代码][代码]},[代码][代码] [代码][代码]"__core-js_shared__"[代码][代码]: {[代码][代码] [代码][代码]"versions"[代码][代码]: [{[代码][代码] [代码][代码]"version"[代码][代码]: [代码][代码]"2.5.7"[代码][代码],[代码][代码] [代码][代码]"mode"[代码][代码]: [代码][代码]"pure"[代码][代码],[代码][代码] [代码][代码]"copyright"[代码][代码]: [代码][代码]"© 2018 Denis Pushkarev (zloirock.ru)"[代码][代码] [代码][代码]}],[代码][代码] [代码][代码]"keys"[代码][代码]: {[代码][代码] [代码][代码]"IE_PROTO"[代码][代码]: [代码][代码]"Symbol(IE_PROTO)_1.npx70g8i3j"[代码][代码] [代码][代码]},[代码][代码] [代码][代码]"wks"[代码][代码]: {[代码][代码] [代码][代码]"toStringTag"[代码][代码]: [代码][代码]"Symbol(Symbol.toStringTag)_2.npx70g8i3j"[代码][代码],[代码][代码] [代码][代码]"iterator"[代码][代码]: [代码][代码]"Symbol(Symbol.iterator)_3.npx70g8i3j"[代码][代码],[代码][代码] [代码][代码]"species"[代码][代码]: [代码][代码]"Symbol(Symbol.species)_4.npx70g8i3h"[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码]}[代码] 疑问 1、为什么是否启用“ES6转ES5”,global对象不一致? 2、启用“ES6转ES5”之后,global对象不包含App、Page,那么App、Page指向谁(挂载在哪里)?