下这两个回调,显然是不可能的。
要治标治本,首先得弄清楚几个问题,我们的$router 其实是 VueRouter 这个构造函数 new
出来的实例,然后我们的 push、replace 方法其实是在这个构造函数的 prototype 也就是原型
对象上,所以我们的 push 方法里面的 this 指向的就是 VueRouter 的对象实例
下面就可以开始重写了,要找到 VueRouter 所在的地方,也就是 router 的配置文件,这里
面注册了他一下,首先我们需要定义一个变量将原来的 VueRouter 原型对象上的 push 方法
保存下来,然后开始重写,可以看到我们的原始 push 方法是要传入是三个参数,第一个是
跳转的位置,后面两个是 promise 的回调
所以我们可以判断一下我们传进来的参数除了 location 之外有没有两个回调,做一个 if 判
断,如果有就执行你的回调,如果没有我就自动写上两个回调,这里还有一个注意点,我们
之前分析过 push 的 this 是构造函数实例,你如果直接像下面这样调用,很明显你里面的 this
都会指向 window,因为这个变量是在全局作用域下定义的