当前位置: 首页 > news >正文

call apply 和 bind

三者的定义可以看MDN,知乎也有相关讨论很详细,下面记录一下用三者写出的便利方法

借用String转换大写的方法来转换 数组 和 布尔值

String.prototype.toUpperCase.call(true)
// 'TRUE'
String.prototype.toUpperCase.call(['a', 'b', 'c'])
//"A,B,C"
复制代码

把类数组对象转为数组

Array.prototype.slice.call({ 0: 'a', 1: 'b', length: 2 })
// ['a', 'b']

Array.prototype.slice.call(document.querySelectorAll("div"));
Array.prototype.slice.call(arguments);
复制代码

借用数组的indexOf方法应用到类数组对象

<ul class="tab-nav">
    <li>tab1</li>
    <li class="tab-li2">tab2</li>
    <li class="tab-li3">tab3</li>
</ul>
var tabNav=document.querySelector('.tab-nav');
var tabLis=document.querySelectorAll('.tab-nav>li');
tabNav.addEventListener('click',function(e){
  var index = Array.prototype.indexOf.call(tabLis,e.target)
  console.log(index)
})
复制代码

用 apply 将数组添加到另一个数组

var array = ['a', 'b'];
var elements = [0, 1, 2];
array.push.apply(array, elements);
console.info(array); // ["a", "b", 0, 1, 2]
复制代码

用apply求取最大/最小值

/* 找出数组中最大/小的数字 */
var numbers = [5, 6, 2, 3, 7];

/* 应用(apply) Math.min/Math.max 内置函数完成 */
var max = Math.max.apply(null, numbers); /* 基本等同于 Math.max(numbers[0], ...) 或 Math.max(5, 6, ..) */
var min = Math.min.apply(null, numbers);
复制代码

转载于:https://juejin.im/post/5c2ddff0f265da611e4dc726

相关文章:

  • PHP如何在CLI命令模式下连接Postgresql
  • tp5.1 路由获取参数问题总结
  • PIE SDK自定义滤波
  • 关于一对一视频聊天系统的那些干货必备知识
  • python中英文书籍汇总,总有一本是你想要的
  • NeoVim初识
  • redis 系列20 服务器上
  • 非spring框架下使用querydsl
  • Java注解的基本概念和原理及其简单实用
  • Android Studio自定义组合控件
  • 在.Net Micro Framework中使用DPWS
  • PIC16F877A 内部EEPROM读写实验利用内部函数
  • 如何让DevExpress的DateEdit控件正确显示日期的周名
  • 手把手教你配置Windows2003集群
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • 【comparator, comparable】小总结
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • Android Volley源码解析
  • create-react-app做的留言板
  • Hibernate最全面试题
  • javascript数组去重/查找/插入/删除
  • java概述
  • Js基础知识(四) - js运行原理与机制
  • JS专题之继承
  • nfs客户端进程变D,延伸linux的lock
  • Node 版本管理
  • Promise面试题2实现异步串行执行
  • Python socket服务器端、客户端传送信息
  • React Transition Group -- Transition 组件
  • SpringBoot 实战 (三) | 配置文件详解
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • webpack+react项目初体验——记录我的webpack环境配置
  • 提醒我喝水chrome插件开发指南
  • 为什么要用IPython/Jupyter?
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #Ubuntu(修改root信息)
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $(function(){})与(function($){....})(jQuery)的区别
  • (1)STL算法之遍历容器
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (四) 虚拟摄像头vivi体验
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .net 调用php,php 调用.net com组件 --
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NET是什么
  • .NET项目中存在多个web.config文件时的加载顺序
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48