有的时候我们希望通过watch添加函数的同时还立即执行该函数一次, 这个时候我们需要再定义额外的参数传递到watch中. 问题是这个函数不一定是同步函数.
简单处理如下:
class VX { async watch (key, fn, options = { immediately: false }, obj = this.store) { handleDep = fn walkChains(key, obj) options.immediately && await fn(options.defaultParams) } }
this绑定丢失问题
在我在对VX进行删除属性方法的扩展时, 我往walkChain函数中添加了一个执行回调函数的机制, 并且在删除属性这个方法直接调用了walkChain:
+ function walkChains (key, obj, fn) {
const segments = key.split('.')
let deepObj = obj
while (segments.length) {
deepObj = deepObj[segments.shift()]
+ fn && fn()
}
}
del (key, obj = this.store) {
walkChains(key, obj, handleDep.clear)
delete obj[key]
}
因为handleDep.clear当成参数传递进walkChains中会 丢失this绑定 , 所以上面那段代码其实是有问题的, 不过稍作修改就好了:
del (key, obj = this.store) { + walkChains(key, obj, () => handleDep.clear()) delete obj[key] }
总结
以上所述是小编给大家介绍的150行代码带你实现微信小程序中的数据侦听,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
您可能感兴趣的文章: