为什么我的this显示的是undefined不是null?跟着老师一步一步做的呀

为什么我的this显示的是undefined不是null?跟着老师一步一步做的呀

http://img1.sycdn.imooc.com//climg/5eb14b2e095f6d4309530280.jpg

http://img1.sycdn.imooc.com//climg/5eb14bac09c0c1d111500300.jpg

var postsData = require('../../../data/post-data.js')


Page({


  /**

   * 页面的初始数据

   */

  data: {

    collected: false

  },


  /**

   * 生命周期函数--监听页面加载

   */

  onLoad: function (options) {

    var postId = options.id

    this.data.currentPostId = postId

    var postData = postsData.postList[postId]

    this.setData({

      postData: postData

    })


    var postsCollected = wx.getStorageSync('postsCollected')

    console.log(postsCollected)

    if (postsCollected) {

      var postCollected = postsCollected[postId]

      if (postCollected) {

        this.setData({

          collected: postCollected

        })

      }

    }

    else {

      var postsCollected = {}

      postsCollected[postId] = false

      wx.setStorageSync('postsCollected', postsCollected)

    }

  },


  onCollectionTap: function () {


    // wx.showToast({

    //   title: collected?'收藏成功':'取消成功',

    //   duration:1000,

    //   icon:'success'

    // })


    wx.showModal({

      title: '收藏',

      content: '是否收藏该文章',

      showCancel: true,

      cancelText: '不收藏',

      confirmText: '收藏',

      cancelColor: '#333',

      confirmColor: '#405f80',

      success: function (res) {

        if (res.confirm) {

          var postsCollected = wx.getStorageSync('postsCollected')

          var collected = postsCollected[this.data.currentPostId]

          collected = !collected

          postsCollected[this.data.currentPostId] = collected

          wx.setStorageSync('postsCollected', postsCollected)

          this.setData({collected})

        }

      }

    })

  },


  onShareTap: function () {


  },


  /**

   * 生命周期函数--监听页面初次渲染完成

   */

  onReady: function () {


  },


  /**

   * 生命周期函数--监听页面显示

   */

  onShow: function () {


  },


  /**

   * 生命周期函数--监听页面隐藏

   */

  onHide: function () {


  },


  /**

   * 生命周期函数--监听页面卸载

   */

  onUnload: function () {


  },


  /**

   * 页面相关事件处理函数--监听用户下拉动作

   */

  onPullDownRefresh: function () {


  },


  /**

   * 页面上拉触底事件的处理函数

   */

  onReachBottom: function () {


  },


  /**

   * 用户点击右上角分享

   */

  onShareAppMessage: function () {


  }

})


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好, 老师一开始以为同学是问为什么报错,所以给出了解决方案,换成箭头函数就可以了。

在断点调试时this是undefined而不是null,是因为调试版本的问题,调整到2.4.2之前的老版本,断点调试时this指向的就是null了。

如下,老师测试了2.4.0版本

http://img1.sycdn.imooc.com//climg/5eb2579e09011de328781532.jpg

同学可以测试理解下,祝学习愉快~

  • Aurora_Meteor 提问者 #1
    所以我的操作和代码没有问题,只是因为版本不一样是吗?
    2020-05-06 14:30:44
  • 好帮手慕慕子 回复 提问者 Aurora_Meteor #2
    同学你好,是的,祝学习愉快~
    2020-05-06 16:43:53
好帮手慕慕子 2020-05-06 13:42:35

同学你好, 视频中老师一开始书写的方式,因为success中的this指向问题,也会出现报错问题,所以老师在后面换成了箭头函数的形式,改变success函数中this指向,解决了问题。

http://img1.sycdn.imooc.com//climg/5eb24e0d0958f6b515740592.jpg

建议:同学可以改成箭头函数再测试下。

祝学习愉快~


  • 提问者 Aurora_Meteor #1
    视频里老师没有使用箭头函数的时候,使用的断点调试,显示的是null不是undefined,之后才使用了箭头函数的呀,3:50-4:25左右老师您看一下。 而且在https://class.imooc.com/course/qadetail/127220和https://class.imooc.com/course/qadetail/124495这几个回答里老师都说应该是null,也没说箭头函数的问题呀?
    2020-05-06 14:03:49
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
3.WebAPP开发与小程序
  • 参与学习           人
  • 提交作业       622    份
  • 解答问题       6815    个

微信带火了小程序,也让前端工程师有了更多的展现机会,本阶段带你从移动基础知识的学习到webAPP开发,及小程序开发,让你PC端与移动端两端通吃。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师