apply与call简单用法以及判断数组的坑
1 typeof 和 instanceof
var array = [];
平时如果判断一个对象是否为数组,可能你会用 typeof array,但是输出为“object”。
typeof 一般只能返回如下几个结果:
number,boolean,string,function,object,undefined。
对于 Array,Null 等特殊对象使用 typeof 一律返回 object。
所以你因该 :
array instanceof Array 输出为 true;
当然 :
array instanceof Object 输出也为 true;
因为 Array本身就是对象的子集。
这也是为什么转化类数组为数组的方法为:
Array.prototype.slice.call(arguments,0);
当然:
[].slice.call(arguments,0);也是可以的。
2 call 和 apply
上面既提到call的用法,那么我就顺便说一下call和apply的用法。
apply:
Function.apply(obj,args)方法能接收两个参数,
obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function(args-->arguments, 指的是函数中的参数
实例:
function people(age,sex){
this.age=age;
this.sex=sex;
};
function adult(age,sex){
people.apply(this,arguments)
};
var jack = new adult(18,'man');console.log(jack.age+":"+jack.sex)
输出为 18:man;
其实看到这段代码就知道apply怎么用了吧。
其实apply 说到底就是为了使的一个对象可以使用不属于自己的方法,例如:jack.people(),这样肯定不行的!
网上看到的关于apply一些延伸的方法:
求最大值:var array = [1,2,3];Math.max.apply(null,array); // 3
求最小值:var array = [1,2,3];Math.min.apply(null,array); // 1
合并数组:var array1 = [1,2,3],array2 = [4,5,6];Array.prototype.push.apply(array1,array2);
其实就是利用apply的特性将数组转化为参数列表[param1[,param2[,…[,paramN]]]],去处理这些问题。
前两个方法是因为不接受数组,所以这样处理。
第三个合并数组有很多其他方法,可以不这样用。
call:
Function.call(obj,[param1[,param2[,…[,paramN]]]])
其实这里的参数列表 [param1[,param2[,…[,paramN]]]]= arguments;只是call 必须将参数列出来;
如果运用上面的例子,输出的结果是一样一样的!
如果还有其他延伸的有意思的方法给以发评论告诉我!
最新文章
- 异常处理_Maven多模块web项目整合ssm+dubbo
- LintCode-- Remove Linked List Elements
- 在JavaScript中实现yield,实用简洁实现方式。
- Spring里用@RequestParam接受Date类型的url参数
- php while循环 指定显示内容 例如不想显示前10条和后10条
- javascript 变量转义
- js中addEventListener第三个参数涉及到的事件捕获与冒泡
- WPF 完美截图 <;序>;
- 微信小程序教学第四章第三节(含视频):小程序中级实战教程:详情-功能完善
- hdu 5274 树链剖分
- J.U.C-三剑客[semaphore\CyclicBarrier\CountDownLatch]
- IntelliJ IDEA添加JUnit单元测试
- 结合JDK源码看设计模式——简单工厂、工厂方法、抽象工厂
- 李昊大佬的CV模板
- using python read/write HBase data
- MEF 插件式开发之 DotNetCore 中强大的 DI
- java的小程序在html中的运行测试
- Python学习笔记之函数式编程
- Devexpress VCL Build v2014 vol 14.2.1 beta发布
- Java synchronized关键字的理解
热门文章
- 【原创】SSRS (SQL Serve Reporting Service) 访问权限的问题
- Opserver 初探三《服务器数据监控》
- PL/SQL DEVELOPER数字超长显示了科学计数法
- grep常用用法
- Android PdfViewer
- VMware Workstation 11 中 Ubuntu 14.04 的 VMware Tools 问题 :没有显示共享文件夹
- mysql数据库修改字符编码问题
- tomcat启动(四)Catalina分析-server的init()方法
- tomcat启动(三)Catalina简要分析
- highcharts绘制股票k线