4. [해결됨] TypeError: Cannot read property'setData'of undefined

2039 단어

장면


스스로 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: 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)를 쓸 때 thisundefined에 정의되지 않았다.(res) => { }를 쓸 때thisObject이다.
[분석 총결] 1. 만약에 함수를 대상으로 하는 방법이 호출된다면this는 이 상급 대상, 즉 호출 방법의 대상을 가리킨다.2. 구조 함수 중의this라면this는 새로 만든 대상 자체를 가리킨다.

좋은 웹페이지 즐겨찾기