Js中的apply和call
1.call和apply都是为了改变某个函数运行时的上下文而存在的
2.也就是改变函数体内this的指向。
3.二者的作用完全一样,只是接受参数的方式不太一样。
4.call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里
例如:
func1 定义如下:
var func1 = function(arg1, arg2) {};
call方式:
func1.call(this, arg1, arg2);
apply方式
func1.apply(this, [arg1, arg2]);
一个应用:
function classof(obj){
if(obj===null){
return "NULL"
}
if(obj===undefined){
return "Undefined"
}
return Object.prototype.toString.call(obj).slice(8,-1)
}
通过Object.prototype.toString.call调用对象的方法,返回字符串,然后从字符串中截取出对象的真实类型
说明:
1.toString方法是object这个对象的方法,js中的每个对象都继承于object
2.object的toString方法会返回[object Object]这样的字符串,其中8到倒数第二位为类型
3.很多JS中的类都重写了toString方法,所以返回的形式就不一定是2中规定的那样了
4.利用Object.prototype.toString.call调用
Js中的apply和call的更多相关文章
- 深入理解js中的apply、call、bind
概述 js中的apply,call都是为了改变某个函数运行时的上下文环境而存在的,即改变函数内部的this指向. apply() apply 方法传入两个参数:一个是作为函数上下文的对象,另外一个是作 ...
- js中的apply和call API
借用网上的一个例子: fun.call(this,arg1,arg2,arg3) fun.apply(this,arguments) this.fun(arg1,arg2,arg3) 三种方法等效. ...
- js中call(),apply(),以及prototype的含义
最近段时间主要学习前端去了,然而所遇到的一些问题我觉得有必要去深究一下 prototype: 1 js中有三种表达方法 类方法,属性方法,原型方法 function People(name) { th ...
- js中call apply方法的使用介绍
js call call 方法 请参阅 应用于:Function 对象 要求 版本 5.5 调用一个对象的一个方法,以另一个对象替换当前对象. call([thisObj[,arg1[, arg2[, ...
- js 中call,apply,bind的区别
call.apply.bind方法的共同点与区别: apply.call.bind 三者都是用来改变函数的this对象的指向: apply.call.bind 三者都可以利用后续参数传参: bind ...
- js中的apply调用
今天看了阮一锋老师的一篇文章,感觉很明了对闭包的理解,尤其是文章中的apply的介绍 apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象. ...
- 关于JS中的apply()与call()使用方法与区别
Js apply方法详解我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里 ...
- Js中call apply函数以及this用法
this介绍: C#里this关键字的意义比较确定的.JavaScript的this关键字,随着函数使用场合不同,this的值会发生变化,感觉用法比较混乱,所以,现在是有必要整理一下的时刻了! 总结一 ...
- 闲聊js中的apply、call和arguments
JavaScript提供了apply和call两种调用方式来确定函数中的this的指向,在现实编码中,我确实 很少接触到这两个方法.但很无奈,很多面试题都要考这两种方法,我又没怎么用到,所以我们先来 ...
随机推荐
- ant 报 make sure you have it in your classpath
检查build.xml的配置 build.xml配置出错,导致的这个问题
- 在UC浏览器打开链接唤醒app,假设没有安装该app,则跳转到appstore下载该应用
在UC浏览器打开链接唤醒app,假设没有安装该app,则跳转到appstore下载该应用 须要在project中设置例如以下: 1.打开project中的myapp-Info.plist文件 2.打开 ...
- Linux——学习环境搭建
终于决定将学习环境彻底转到Linux上来,下面记录一下转移学习环境的各种软件和环境的安装和配置. 1.centos自带python2.6,之前的博文已经说到已成功更新到python3.3,下面首先安装 ...
- Nginx:处理HTTP请求
参考资料<深入理解Nginx>(陶辉) 处理HTTP请求 接着上一次的内容,本次将说明HTTP框架是如何召集负责具体功能的各HTTP模块合作处理请求的. 在http://www.cnblo ...
- java调用本地默认浏览器
1 http://blog.csdn.net/casularm/article/details/3401018 2
- Android XMPP 即时通讯
0 http://blog.csdn.net/lnb333666/article/details/7471292 0.1 http://www.cnblogs.com/charley_yang/arc ...
- String、StringBuffer、StringBuilder区别并验证
© 版权声明:本文为博主原创文章,转载请注明出处 String.StringBuffer.StringBuilder的区别 1.String是一个常量,其对象一旦创建完毕就无法改变,当使用“+”拼接字 ...
- [译]GLUT教程 - 移动镜头2
Lighthouse3d.com >> GLUT Tutorial >> Input >> Move the Camera II 本节的最后一个示例是回顾.现在我们 ...
- SetTimer时间间隔的问题
1.用WM_TIMER来设置定时器 SetTimer函数的原型 UINT_PTR SetTimer( HWND hWnd, // 窗体句柄 UINT_PT ...
- k8s集群部署
环境: 两台虚拟机, 10.10.20.203 部署docker.etcd.flannel.kube-apiserver.kube-controller-manager.kube-scheduler ...