案例–发送验证码5s

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title><style type="text/css"></style></head><body><button>点击发送验证码1</button><button>点击发送验证码2</button></body><script type="text/javascript">var btns = document.querySelectorAll('button');for (var i = 0; i < btns.length; i++) {btns[i].index = i;btns[i].onclick = function() {var c = 5; //5sthis.timer = setInterval(function() {//定时器中的this默认指向的是window  需要用bind改变this指向为当前的事件源c--;this.disabled = true;this.innerText = '还剩' + c + '秒';if (c == 0) {//禁用按钮  disabled=''  true:开启禁用  false:关闭禁用this.disabled = false; this.innerText = '点击发送验证码1';clearInterval(this.timer);}}.bind(this), 1000) //用bind方法去改变this的指向,不去执行bind的方法}}</script>
</html>

案例–apply求数组最大值

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body></body><script type="text/javascript">var arr=[2,3,6,8,10];//apply借助math的方法传入arr数组参数实现求最大值var maxNum=Math.max.apply(Math,arr);console.log(maxNum);</script>
</html>

判断数据类型

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body></body><script type="text/javascript">//typeOf  判断console.log(typeof 1);//Object.prototype.toString.call(123)  用apply()或者callconsole.log(Object.prototype.toString.call(123));//用constructor来判断var n=2;console.log(n.constructor);</script>
</html>

构造函数的继承

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body></body><script type="text/javascript">function Father (name,age) {this.name=name;this.age=age;this.say=function () {console.log('我在说话');}}function Son (name,age,sex) {//利用Call方法给Father的this指向改变  让父亲的属性孩子可以继承//缺点:会抵消原型链,不常用Father.call(this,name,age);this.sex=sex;this.sleep=function () {console.log('我在睡觉');}}var son=new Son('小谷',10,'女');son.say();son.sleep();</script>
</html>

新的继承方法

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body></body><script type="text/javascript">function Father (name,age) {this.name=name;this.age=age;this.say=function () {console.log('我在说话');}}function Son (name,age,sex) {//让构造器产生联系Father.call(this,name,age);this.sex=sex;this.sleep=function () {console.log('我在睡觉');}}//让原型链产生联系//1.子构造器的原型对象指向父构造器的实例//2.再将子构造器的原型对象指向子构造器Son.prototype=new Father();Son.prototype.constructor=Son;//所有的新增方法的操作放在链条底下Son.prototype.study=function () {console.log('我会学习');}var son=new Son('小谷',10,'女');son.say();son.sleep();son.study();console.log(son);/* 深度理解:将字构造器的原型对象        指向-->父实例     在访问方法时子构造原型里面没有,回去父亲的本身找,再去父亲的原型对象去找子构造器的原型对象的原型对象    指向-->子构造器*/</script>
</html>

第三种继承方式

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body></body><script type="text/javascript">function Father (name,age) {this.name=name;this.age=age;this.say=function () {console.log('我在说话');}}function Son (name,age,sex) {Father.call(this,name,age);this.sex=sex;this.sleep=function () {console.log('我在睡觉');}}//使用类式继承创建新对象实现继承Son.prototype=Object.create(Father.prototype,{constructor:{value:Son},fly:{value:function () {console.log('我会飞');}}})var son=new Son('小谷',10,'女');// son.say();console.log(son);// son.sleep();</script>
</html>

实现类式继承

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body></body><script type="text/javascript">var P={name:'小谷',sex:'男'}// Object.create(老对象,{属性:{描述}})//返回新对象,且新对象继承了父对象(通过__proto__)var xiaoxiao=Object.create(P,{age:{configurable:true,writable:true,Enumerable:true,value:function(){console.log('睡觉');}}});console.log(xiaoxiao);</script>
</html>

数组的遍历

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body></body><script type="text/javascript">var arr=[1,2,3,4,5,6,8];//forEach()遍历数组//数组.forEach(function(v,i,arr){})       v:value     i:index     arr:数组对象arr.forEach(function (v,i,arr) {console.log(v,i,arr);})//对数组进行遍历和处理     map()       返回值:返回一个新数组var arr1=arr.map(function (v,i) {return v+'0';})console.log(arr1);//过滤符合条件的元素        filter()                返回值:返回一个新数组var arr2=arr.filter(function (v,i) {return v>2;})console.log(arr2);//查询是否有符合条件的数组元素                      返回值:true/falsevar arr3=arr.some(function (v,i) {return v>2;})console.log(arr3);//查询是否全部元素符合条件                           返回值:true/falsevar arr4=arr.every(function (v,i) {return v>8;})console.log(arr4);//查找第一个满足条件的元素                          返回值:返回符合条件的第一个元素/undefinedvar arr5=arr.find(function (v,i) {return v>2;})console.log(arr5);//reduce(total,v,i,arr)                          返回值:返回一个值var arr6=arr.reduce(function (total,v,i) {        return total+v;})console.log(arr6);</script>
</html>

前端路线--JS高阶(day03)相关推荐

  1. 原生js循环展示dom_web前端教程:JS高阶编程技巧-惰性函数

    框架(framework)是一个框子--指其约束性,也是一个架子--指其支撑性.是一个基本概念上的结构,用于去解决或者处理复杂的问题. Web前端教程 框架这个广泛的定义使用的十分流行,尤其在软件概念 ...

  2. create React-app脚手架中封装withRouter.js高阶组件

    由于 useNavigate.useLocation.useSearchParams等方法,只能写在函数内,也就是说我们可以在React Hooks 函数组件内可以直接 import 导入,创建实例化 ...

  3. export function函数传参_04 js高阶函数(惰性函数、柯里化函数、compose函数)和单例设计模式...

    高阶函数的定义 在<javascript设计模式和开发实践>中是这样定义的. 函数可以作为参数被传递: 函数可以作为返回值输出. 结合这两个特点,首先想到的肯定是回调函数,回调函数也是高阶 ...

  4. js 高阶函数之柯里化

    博客地址:https://ainyi.com/74 定义 在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且 ...

  5. js高阶函数的使用-filter/map/reduct

    通过案例来讲述这几个函数的使用 // filter函数的使用,过滤数组中小于50的元素const nums = [11, 22, 33, 44, 55, 111, 333];let num1 = nu ...

  6. JS高阶编程之柯理化函数

    柯理化函数编程: 一个大函数执行,返回一个小函数. <!DOCTYPE html> <html lang="en"><head><meta ...

  7. 猿人学·爬虫逆向高阶课

    我跟 virjar 出了一套爬虫课(猿人学·爬虫进阶培训课),包含:安卓逆向抓取.JS 高阶逆向抓取.安卓群控抓取.容器定制化等. 实际上我去年就在做这个爬虫课了,一直没有放到网课平台上公开宣传,但是 ...

  8. 高阶前端开发人员必备工具-Node.JS知识讲解

    想要成为一个"值钱"的高阶Web前端开发人才,Node.JS是必须要掌握的技术之一.今天小千就为大家详细讲解Node.JS的知识,让你完全了解Node.JS的前世今生. 1.说起N ...

  9. js最简单的几个特效_高阶函数不会用?教你JS中最实用的几个高阶函数用法

    不废话,先来看下什么是高阶函数 高阶函数 函数可以作为参数传递 函数可以作为返回值输出 函数作为参数传递 回调函数 在ajax异步请求的过程中,回调函数使用的非常频繁 在不确定请求返回的时间时,将ca ...

最新文章

  1. 【Qt】QImage使用总结
  2. Windows7操作系统任务栏的相关技巧
  3. mysql+phpmyadmin配置流程
  4. 07 总结ProgressDialog 异步任务
  5. 芯片内部长啥样?牛人用1500张照片,一层层放给你
  6. MySQL查看和修改数据库存储目录
  7. git使用教程(初次配置+错误提示)
  8. Jquery—Jquery中$与$.fn的区别
  9. Django model 设置数据库 字段 编码
  10. WEBPACK+ES6+REACT入门(5/7)-在React中为按钮绑定点击事件
  11. python3 matplotlib多个子图分别对应不同colorbar
  12. Centos升级GLIBC
  13. camera link心得
  14. 无法同步谷歌日历_这场科技发布会上,谷歌究竟更新了啥?
  15. 【Meta Learning学习笔记】Meta Learning详解
  16. 比较好用的自定义软键盘
  17. 第4章数据库的查询、视图和游标
  18. 自旋锁与适应性自旋锁
  19. android 热更新 方案,热更新-热更新app开发的两种系统方案!
  20. B863AV3.2-M、B863AV3.1-M2、E900V22C通刷固件(可救砖)

热门文章

  1. HTML块级元素与行内元素的转变
  2. Java下bug经历汇总
  3. quick-x用http发送字节流会被截断的问题
  4. springboot基于javaweb的社区留守儿童帮扶系统毕业设计源码101603
  5. Result「?」 返回类型拼接
  6. HDU 3831 DICS
  7. 公众号修改服务器地址,改公众号提供的服务器地址
  8. [英语语法]词法之独立主格
  9. 面试|C# .net 面试题
  10. 微信小程序自带地图_小程序丨教你:如何打开小程序如何打开微信自带的地图(附源码)...