场景
在某些场景下,我们需要覆盖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指向谁(挂载在哪里)?
不要使用global,如果你想覆盖App或Page构造器的话,可以直接重新赋值给Page或App,但是并不是很推荐这么做。你可以直接封装一个新的构造器,比如 module.exports = function MyApp(args) { App(args) } 这样的。
你好,业务代码肯定是不会这么写的,一般是引入library需要覆盖Page或Vue,会需要拦截处理(跟web拦截xhr一样),因为这样处理就不需要依赖方做显示改动。
所以可否解释一下global、App、Page三者在是否启用“ES6转ES5”的两个场景下的关系,避免后来者采坑。
下文呢???
我也一样疑惑了好久,等了好久,还是没有大佬来解答
感觉我们平明百姓好可怜哦