【JS】this.reset is not a function.

今天在学习JS的时候遇到了这样一个问题,做个笔记记录一下。

  • 问题 1:下面代码报错:this.reset is not a function.
const info = document.querySelector('.info')
info.addEventListener('submit', e => {
  e.preventDefault()
  // ...
  // 存储到数组后,清空表单
  this.reset()
})

答:this.reset() 在箭头函数中可能不会按预期工作,因为箭头函数不绑定自己的 this,所以需要改用普通函数function(){}或者直接使用 info.reset()

  • 问题 2:为什么箭头函数不绑定自己的 this ?箭头函数的实质是什么?

**答:**箭头函数不绑定自己的 this 是因为它们被设计为没有自己的 thisargumentssupernew.target。这些函数表达式更适用于那些不需要自己的 this 的函数。在箭头函数中,this 是词法绑定的,它使用的是定义箭头函数时的环境的 this

箭头函数的实质是它是一个更简洁的函数语法,不绑定自己的 this。这使得它们特别适合非方法函数,并且它们不能用作构造函数。

  • 问题 3:如果在箭头函数中使用 console.log(this) 打印 this ,控制台会显示什么?

答:在箭头函数中,this 是词法绑定的,也就是说,它使用的是定义箭头函数时的环境的 this。在你的代码中,箭头函数是在全局作用域中定义的,所以 this 应该指向全局对象

如果代码在浏览器环境中运行,this 通常指向 window 对象。

如果在严格模式下运行,this 会是 undefined

如果在 Node.js 环境中运行,this 会指向 global 对象。
this指向了window对象

  • 问题 4:如何快速对表单进行验证是否有空数据?

答:用 querySelectorAll

<body>
    <h1>新增学员</h1>
    <form class="info" autocomplete="off">
    姓名:<input type="text" class="uname" name="uname" />
    年龄:<input type="text" class="age" name="age" />
    性别:
    <select name="gender" class="gender">
      <option value=""></option>
      <option value=""></option>
    </select>
    薪资:<input type="text" class="salary" name="salary" />
    就业城市:<select name="city" class="city">
      <option value="北京">北京</option>
      <option value="上海">上海</option>
      <option value="广州">广州</option>
    </select>
    <button class="add">录入</button>
    </form>
</body>

<script>
  const items = document.querySelectorAll('[name]')
  // 提交数据前检查表单是否有空数据
  for(let i = 0; i < items.length; i++){
    if (items[i].value === '') {
      return alert('数据不能为空!')
    }
  }
</script>
  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值