自定义组件methods中的this指向
app.js中:
globalData: { audioContext: wx.getBackgroundAudioManager()}, |
自定义组件中component.js:
methods: { showAudio: function () { app.globalData.audioContext.onPlay(() => { this.togglePlay()
//app.globalData.audioContext.onPlay(function () { // this.togglePlay() //})
}, togglePlay: function () { console.log('playing', this) this.setData({ playing: true }) }} |
onPlay等函数如果不用箭头函数,则togglePlay内的this会变成togglePlay自身,而不是外部的组件本身,从而无法setData。
但是在一个页面中page.js:
showAudio: function () { // app.globalData.audioContext.onPlay(function () { // this.toggleAudioPlay // }) // app.globalData.audioContext.onPlay(() => { // this.toggleAudioPlay // }) app.globalData.audioContext.onPlay(this.toggleAudioPlay)
|
toggleAudioPlay: function () { console.log('audio play', this) this.setData({ playing: true, paused: false }) }, |
实际上这三种写法都一样,this总是指向page自身,可以setData.
所以自定义组件的methods中的this为什么和page中的不一样呢?
箭头函数会将this绑定在定义时的对象上,所以this指向组件自身,这个还可以理解。
不过不用箭头函数时自定义组件为什么会将this绑定到callback自身上,求指点。
