微信小程序錯(cuò)誤this.setData報(bào)錯(cuò)及解決過程
先說原因:
function聲明的函數(shù)和箭頭函數(shù)的作用域不同,這是一個(gè)不小心坑的地方。可參考箭頭函數(shù)說明:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
所以對(duì)于這個(gè)結(jié)果,還是換回es5的function函數(shù)去寫最好了。
箭頭函數(shù)和function的區(qū)別:
- 箭頭函數(shù)體內(nèi)的this對(duì)象,就是定義時(shí)所在的對(duì)象,而不是使用時(shí)所在的對(duì)象
- 箭頭函數(shù)不可以當(dāng)作構(gòu)造函數(shù),也就是說,不可以使用new命令,否則會(huì)拋出一個(gè)錯(cuò)誤
- 箭頭函數(shù)不可以使用arguments對(duì)象,該對(duì)象在函數(shù)體內(nèi)不存在。如果要用,可以用Rest參數(shù)代替,不可以使用yield命令,因此箭頭函數(shù)不能用作Generator函數(shù)。
這么寫會(huì)報(bào)錯(cuò)
thirdScriptError this.setData is not a function;at pages/index/index onLoad function;at api getSystemInfo success callback function TypeError: this.setData is not a function
onLoad: function () {
wx.getSystemInfo({
success: function (res) {
this.setData({
lang: res.language
})
console.log(res.language)
}
})
這么改一下就不報(bào)錯(cuò)了。
onLoad: function() {
wx.getSystemInfo({
success: (res) = >{
this.setData({箭頭函數(shù)的this始終指向函數(shù)定義時(shí)的this lang: res.language
}) console.log(res.language)
}
})
或者這樣:
onLoad: function () {
var that=this;
wx.getSystemInfo({
success: function (res) {
that.setData({
lang: res.language
})
console.log(res.language)
}
})
可以用如下示例說明:
'use strict';
var obj = {
i: 10,
b: () => console.log(this.i, this),
c: function() {
console.log(this.i, this);
}
}
obj.b(); // prints undefined, Window {...} (or the global object)
obj.c(); // prints 10, Object {...}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
如何利用JavaScript獲取字符串中重復(fù)次數(shù)最多的字符
這篇文章主要給大家介紹了關(guān)于如何利用JavaScript獲取字符串中重復(fù)次數(shù)最多的字符的相關(guān)資料,文中介紹了兩種解決方案,分別是使用對(duì)象以及數(shù)組&指針來實(shí)現(xiàn),需要的朋友可以參考下2021-07-07
微信小程序 自定義復(fù)選框?qū)崿F(xiàn)代碼實(shí)例
這篇文章主要介紹了微信小程序 自定義復(fù)選框?qū)崿F(xiàn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
JavaScript數(shù)據(jù)類型及相互間的轉(zhuǎn)換規(guī)則
這篇文章主要介紹了JavaScript數(shù)據(jù)類型及相互間的轉(zhuǎn)換規(guī)則,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
JavaScript 高仿真可控彈簧振子實(shí)現(xiàn)代碼
我剛學(xué)JavaScript ,看見一些牛人寫了許多特效,我也花了一天寫了一個(gè)彈簧振子,完全獨(dú)創(chuàng),沒有借鑒任何人的代碼.2009-10-10
js或者jquery判斷圖片是否加載完成實(shí)現(xiàn)代碼
需要獲得圖片的寬度和高度,有些js或者jquery代碼在還沒有加載完圖片時(shí)就執(zhí)行了,這個(gè)問題該怎么解決呢?接下來分別介紹下js與jquery提供的方法2013-03-03
用js+iframe形成頁面的一種遮罩效果的具體實(shí)現(xiàn)
用js形成頁面的一種遮罩效果,選擇想要進(jìn)行遮罩的窗口,在這里想要遮罩的是一個(gè)iframe窗口,具體的實(shí)現(xiàn)如下,感興趣的朋友可以參參考下2013-12-12

