关于小程序闭包插件在遇到页面回退的时候this指向的bug
1,一般做小程序的插件我都会在一个js写一个闭包,例如这样子:
var plugin = function(tempOption){
this.option = tempOption;
this.pageThis = tempOption.pageThis; //传入页面Page的this
};
plugin.prototype.init = function(){
this.pageThis.aaa = this.aaa; //往页面注入方法
};
plugin.prototype.aaa = function(){
};
module.exports.Plugin = function(tempOption){
var tempPlugin = new plugin(tempOption);
tempPlugin.init();
return tempPlugin;
};
2,一般插件都涉及到对页面交互的操作,所以需要操作到Page闭包里面的data数据,或者需要往页面注入一些方法方便模板的bindtap调用。所以一般插件我都会在页面调用的时候把页面的this当做参数传入到插件中供调用。例如:
var pluginJs = require(‘…/plugin.js’);
Page({
onLoad:function(){
plugin = pluginJs.Plugin({pageThis:this}); //把页面的this传入到插件中
}
})
3,一般情况下是没有任何问题的,但是当在页面A实例化插件时this指向的是页面A的this,然后A页面跳转到B页面实例化插件时this指向的是页面B的this。到这个地方依然没有任何问题,但如果这时候我点击顶部的回退按钮撤退到页面A,这时候插件的this指向的是还是页面B的this。所以就只能在onShow再做一次实例化做弥补,因为不少插件是要在数据读取之前先实例化的,所以没办法规避在onLoad里面做实例化。其它的编程语言也没有这种说写一个插件给别人调用还要写2次实例化这种道理的。
