場景
自己在呼叫 wx.getSystemInfo({}) 時,開發工具自動補全了代碼,在 success 回呼中按照以往的寫法呼叫 this.setData({ }); 時,報錯:TypeError: Cannot read property 'setData' of undefined,
相關代碼如下:
/**
* 生命周期函式--監聽頁面加載
*/
onLoad: function (options) {
wx.getSystemInfo({
success: function (res) {
console.log(res);
this.setData({
system_info: res.brand,
});
},
fail: function (res) {
this.myShowError("獲取手機系統資訊")
},
complete: function (res) { },
})
},
仔細對比和之前系結事件呼叫 this.setData({ }); ,呼叫方式并沒有什么差別,查閱資料發現要改成 success: (res) => {}; 這種寫法,而不是 success: function (res) {};,就可以正常使用了,
/**
* 生命周期函式--監聽頁面加載
*/
onLoad: function (options) {
wx.getSystemInfo({
success: (res) => {
console.log(res);
this.setData({
system_info: res.brand,
});
},
fail: function (res) {
this.myShowError("獲取手機系統資訊")
},
complete: function (res) { },
})
},
解決方法
將下列代碼:
success: function (res) {
this.setData({})
}
改成以下代碼:
success: (res) => {
this.setData({})
}
原因分析
原因:兩種寫法 this 指向不同;
將下列兩種情況分別運行一遍:
success: (res) => {
console.log("(res) => { }時:" + this);
},
success: function (res){
console.log("function (res)時:" + this);
},
運行結果對比分析:
function (res)時:undefined
(res) => { }時:[object Object]
function (res) 寫法時 ,this 是 undefined 未定義的,
(res) => { } 寫法時 this 是 Object,
分析總結
- 如果函式作為物件的方法呼叫,
this指向的是這個上級物件,即呼叫方法的物件, - 如果是建構式中的
this,則this指向新創建的物件本身,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293930.html
標籤:其他
