小程序中的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指向谁(挂载在哪里)?